home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / bin / automake-1.4 < prev    next >
Text File  |  2005-10-16  |  200KB  |  7,335 lines

  1. #!/usr/bin/perl
  2. # -*- perl -*-
  3. # Generated automatically from automake.in by configure.
  4.  
  5. eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
  6.     if 0;
  7.  
  8. # automake - create Makefile.in from Makefile.am
  9. # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  10.  
  11. # This program is free software; you can redistribute it and/or modify
  12. # it under the terms of the GNU General Public License as published by
  13. # the Free Software Foundation; either version 2, or (at your option)
  14. # any later version.
  15.  
  16. # This program is distributed in the hope that it will be useful,
  17. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19. # GNU General Public License for more details.
  20.  
  21. # You should have received a copy of the GNU General Public License
  22. # along with this program; if not, write to the Free Software
  23. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  24. # 02111-1307, USA.
  25.  
  26. # Originally written by David Mackenzie <djm@gnu.ai.mit.edu>.
  27. # Perl reimplementation by Tom Tromey <tromey@redhat.com>.
  28.  
  29.  
  30. # Parameters set by configure.  Not to be changed.  NOTE: assign
  31. # VERSION as string so that eg version 0.30 will print correctly.
  32. $VERSION = "1.4-p6";
  33. $PACKAGE = "automake";
  34. $prefix = "/usr";
  35. $am_dir = "/usr/share/automake-1.4";
  36. $TAR = "tar";
  37.  
  38. # String constants.
  39. $IGNORE_PATTERN = "^##([^#].*)?\$";
  40. $WHITE_PATTERN = "^[ \t]*\$";
  41. $COMMENT_PATTERN = "^#";
  42. $RULE_PATTERN = "^([\$a-zA-Z_.][-.a-zA-Z0-9_(){}/\$]*) *:([^=].*|)\$";
  43. $SUFFIX_RULE_PATTERN = "^\\.([a-zA-Z]+)\\.([a-zA-Z]+)\$";
  44. $MACRO_PATTERN = "^([A-Za-z][A-Za-z0-9_]*)[ \t]*([:+]?)=[ \t]*(.*)\$";
  45. $BOGUS_MACRO_PATTERN = "^([^ \t]*)[ \t]*([:+]?)=[ \t]*(.*)\$";
  46. # This pattern recognizes a Gnits version id and sets $1 if the
  47. # release is an alpha release.  We also allow a suffix which can be
  48. # used to extend the version number with a "fork" identifier.
  49. $GNITS_VERSION_PATTERN = '[0-9]+\.[0-9]+([a-z]|\.[0-9]+)?(-[A-Za-z0-9]+)?';
  50. $IF_PATTERN = "^if[ \t]+\([A-Za-z][A-Za-z0-9_]*\)[ \t]*\(#.*\)?\$";
  51. $ELSE_PATTERN = "^else[ \t]*\(#.*\)?\$";
  52. $ENDIF_PATTERN = "^endif[ \t]*\(#.*\)?\$";
  53. $PATH_PATTERN='(\\w|/|\\.)+';
  54. # This will pass through anything not of the prescribed form.
  55. $INCLUDE_PATTERN = "^include[ \t]+((\\\$\\\(top_srcdir\\\)/${PATH_PATTERN})|(\\\$\\\(srcdir\\\)/${PATH_PATTERN})|([^/\\\$]${PATH_PATTERN}))[ \t]*(#.*)?\$";
  56.  
  57. # Some regular expressions.  One reason to put them here is that it
  58. # makes indentation work better in Emacs.
  59. $AC_CONFIG_AUX_DIR_PATTERN = "AC_CONFIG_AUX_DIR\\(([^)]+)\\)";
  60. $AM_INIT_AUTOMAKE_PATTERN = "AM_INIT_AUTOMAKE\\([^,]*,([^,)]+)[,)]";
  61. $AM_PACKAGE_VERSION_PATTERN = "^\\s*\\[?([^]\\s]+)\\]?\\s*\$";
  62. # Note that there is no AC_PATH_TOOL.  But we don't really care.
  63. $AC_CHECK_PATTERN = "AC_(CHECK|PATH)_(PROG|PROGS|TOOL)\\(\\[?(\\w+)";
  64. $AM_MISSING_PATTERN = "AM_MISSING_PROG\\(\\[?(\\w+)";
  65. # Just check for alphanumeric in AC_SUBST.  If you do AC_SUBST(5),
  66. # then too bad.
  67. $AC_SUBST_PATTERN = "AC_SUBST\\(\\[?(\\w+)";
  68. $AM_CONDITIONAL_PATTERN = "AM_CONDITIONAL\\((\\w+)";
  69.  
  70. # Constants to define the "strictness" level.
  71. $FOREIGN = 0;
  72. $GNU = 1;
  73. $GNITS = 2;
  74.  
  75.  
  76.  
  77. # Variables global to entire run.
  78.  
  79. # TRUE if we should always generate Makefile.in.
  80. $force_generation = 1;
  81.  
  82. # Strictness level as set on command line.
  83. $default_strictness = $GNU;
  84.  
  85. # Name of strictness level, as set on command line.
  86. $default_strictness_name = 'gnu';
  87.  
  88. # This is TRUE if GNU make specific automatic dependency generation
  89. # code should be included in generated Makefile.in.
  90. $cmdline_use_dependencies = 1;
  91.  
  92. # This is the name of a dependency makefile bit (usually for inclusion in a
  93. # SMakefile or similar); empty if not set.
  94. $generate_deps = '';
  95.  
  96. # TRUE if in verbose mode.
  97. $verbose = 0;
  98.  
  99. # This holds our (eventual) exit status.  We don't actually exit until
  100. # we have processed all input files.
  101. $exit_status = 0;
  102.  
  103. # From the Perl manual.
  104. $symlink_exists = (eval 'symlink ("", "");', $@ eq '');
  105.  
  106. # TRUE if missing standard files should be installed.
  107. $add_missing = 0;
  108.  
  109. # TRUE if we should copy missing files; otherwise symlink if possible.
  110. $copy_missing = 0;
  111.  
  112. # Name of the top autoconf input: `configure.ac' or `configure.in'
  113. $configure_ac = '';
  114.  
  115. # Files found by scanning configure.ac for LIBOBJS.
  116. %libsources = ();
  117.  
  118. # True if AM_C_PROTOTYPES appears in configure.ac.
  119. $am_c_prototypes = 0;
  120.  
  121. # Names used in AC_CONFIG_HEADER call.  @config_fullnames holds the
  122. # name which appears in AC_CONFIG_HEADER, colon and all.
  123. # @config_names holds the file names.  @config_headers holds the '.in'
  124. # files.  Ordinarily these are similar, but they can be different if
  125. # the weird "NAME:FILE" syntax is used.
  126. @config_fullnames = ();
  127. @config_names = ();
  128. @config_headers = ();
  129. # Line number at which AC_CONFIG_HEADER appears in configure.ac.
  130. $config_header_line = 0;
  131.  
  132. # Directory where output files go.  Actually, output files are
  133. # relative to this directory.
  134. $output_directory = '.';
  135.  
  136. # Relative location of top build directory.
  137. $top_builddir = '';
  138.  
  139. # Absolute location of top build directory.
  140. $build_directory = '';
  141.  
  142. # Name of srcdir as given in build directory's Makefile.  For
  143. # dependencies only.
  144. $srcdir_name = '';
  145.  
  146. # List of Makefile.am's to process, and their corresponding outputs.
  147. @input_files = ();
  148. %output_files = ();
  149.  
  150. # List of files in AC_OUTPUT without Makefile.am, and their outputs.
  151. @other_input_files = ();
  152. # Line number at which AC_OUTPUT seen.
  153. $ac_output_line = 0;
  154.  
  155. # List of directories to search for configure-required files.  This
  156. # can be set by AC_CONFIG_AUX_DIR.
  157. @config_aux_path = ('.', '..', '../..');
  158. $config_aux_dir = '';
  159.  
  160. # Whether AC_PROG_MAKE_SET has been seen in configure.ac.
  161. $seen_make_set = 0;
  162.  
  163. # Whether AM_GNU_GETTEXT has been seen in configure.ac.
  164. $seen_gettext = 0;
  165. # Line number at which AM_GNU_GETTEXT seen.
  166. $ac_gettext_line = 0;
  167.  
  168. # Whether ALL_LINGUAS has been seen.
  169. $seen_linguas = '';
  170. # The actual text.
  171. $all_linguas = '';
  172. # Line number at which it appears.
  173. $all_linguas_line = 0;
  174.  
  175. # 1 if AC_PROG_INSTALL seen.
  176. $seen_prog_install = 0;
  177.  
  178. # Whether AC_PATH_XTRA has been seen in configure.ac.
  179. $seen_path_xtra = 0;
  180.  
  181. # TRUE if AC_DECL_YYTEXT was seen.
  182. $seen_decl_yytext = 0;
  183.  
  184. # TRUE if we've seen AC_CANONICAL_(HOST|SYSTEM).  The presence of
  185. # AC_CHECK_TOOL also sets this.
  186. $seen_canonical = 0;
  187.  
  188. # TRUE if we've seen AC_ARG_PROGRAM.
  189. $seen_arg_prog = 0;
  190.  
  191. # TRUE if we've seen AM_PROG_LIBTOOL.
  192. $seen_libtool = 0;
  193. $libtool_line = 0;
  194.  
  195. # Files installed by libtoolize.
  196. @libtoolize_files = ('ltmain.sh', 'config.guess', 'config.sub');
  197. # ltconfig appears here for compatibility with old versions of libtool.
  198. @libtoolize_sometimes = ('ltconfig', 'ltcf-c.sh', 'ltcf-cxx.sh',
  199.                 'ltcf-gcj.sh');
  200.  
  201. # TRUE if we've seen AM_MAINTAINER_MODE.
  202. $seen_maint_mode = 0;
  203.  
  204. # TRUE if we've seen PACKAGE and VERSION.
  205. $seen_package = 0;
  206. $seen_version = 0;
  207.  
  208. # Actual version we've seen.
  209. $package_version = '';
  210.  
  211. # Line number where we saw version definition.
  212. $package_version_line = 0;
  213.  
  214. # TRUE if we've seen AM_PATH_LISPDIR.
  215. $seen_lispdir = 0;
  216.  
  217. # TRUE if we've seen AC_EXEEXT.
  218. $seen_exeext = 0;
  219.  
  220. # TRUE if we've seen AC_OBJEXT.
  221. $seen_objext = 0;
  222.  
  223. # TRUE if we've seen AC_ENABLE_MULTILIB.
  224. $seen_multilib = 0;
  225.  
  226. # Hash table of discovered configure substitutions.  Keys are names,
  227. # values are `FILE:LINE' strings which are used by error message
  228. # generation.
  229. %configure_vars = ();
  230.  
  231. # This is used to keep track of which variable definitions we are
  232. # scanning.  It is only used in certain limited ways, but it has to be
  233. # global.  It is declared just for documentation purposes.
  234. %vars_scanned = ();
  235.  
  236. # Charsets used by maintainer and in distribution.  MAINT_CHARSET is
  237. # handled in a funny way: if seen in the top-level Makefile.am, it is
  238. # used for every directory which does not specify a different value.
  239. # The rationale here is that some directories (eg gettext) might be
  240. # distributions of other packages, and thus require their own charset
  241. # info.  However, the DIST_CHARSET must be the same for the entire
  242. # package; it can only be set at top-level.
  243. # FIXME: this yields bugs when rebuilding.  What to do?  Always
  244. # read (and sometimes discard) top-level Makefile.am?
  245. $maint_charset = '';
  246. $dist_charset = 'utf8';        # recode doesn't support this yet.
  247.  
  248. # Name of input file ("Makefile.in") and output file ("Makefile.am").
  249. # These have no directory components.
  250. $am_file_name = '';
  251. $in_file_name = '';
  252.  
  253. # TRUE if --cygnus seen.
  254. $cygnus_mode = 0;
  255.  
  256. # Keys of this hash are names of dependency files to ignore.
  257. %omit_dependencies = ();
  258.  
  259. # Hash table of AM_CONDITIONAL variables seen in configure.
  260. %configure_cond = ();
  261.  
  262. # Map from obsolete macros to hints for new macros.
  263. # FIXME complete the list so that there are no `0' hints.
  264. %obsolete_macros =
  265.     (
  266.      'AC_FEATURE_CTYPE', "use \`AC_HEADER_STDC'",
  267.      'AC_FEATURE_ERRNO', "add \`strerror' to \`AC_REPLACE_FUNCS(...)'",
  268.      'AC_FEATURE_EXIT', 0,
  269.      'AC_SYSTEM_HEADER', 0,
  270.  
  271.      # Note that we do not handle this one, because it is still run
  272.      # from AM_CONFIG_HEADER.  So we deal with it specially in
  273.      # scan_configure.
  274.      # 'AC_CONFIG_HEADER', "use \`AM_CONFIG_HEADER'",
  275.  
  276.      'fp_C_PROTOTYPES', "use \`AM_C_PROTOTYPES'",
  277.      'fp_PROG_CC_STDC', "use \`AM_PROG_CC_STDC'",
  278.      'fp_PROG_INSTALL', "use \`AC_PROG_INSTALL'",
  279.      'fp_WITH_DMALLOC', "use \`AM_WITH_DMALLOC'",
  280.      'fp_WITH_REGEX', "use \`AM_WITH_REGEX'",
  281.      'gm_PROG_LIBTOOL', "use \`AM_PROG_LIBTOOL'",
  282.      'jm_MAINTAINER_MODE', "use \`AM_MAINTAINER_MODE'",
  283.      'md_TYPE_PTRDIFF_T', "use \`AM_TYPE_PTRDIFF_T'",
  284.      'ud_PATH_LISPDIR', "use \`AM_PATH_LISPDIR'",
  285.  
  286.      # Now part of autoconf proper, under a different name.
  287.      'AM_FUNC_FNMATCH', "use \`AC_FUNC_FNMATCH'",
  288.      'fp_FUNC_FNMATCH', "use \`AC_FUNC_FNMATCH'",
  289.      'AM_SANITY_CHECK_CC', "automatically done by \`AC_PROG_CC'",
  290.      'AM_PROG_INSTALL', "use \`AC_PROG_INSTALL'",
  291.      'AM_EXEEEXT', "use \`AC_EXEEXT'",
  292.      'AM_CYGWIN32', "use \`AC_CYGWIN32'",
  293.      'AM_MINGW32', "use \`AC_MINGW32'",
  294.  
  295. # These aren't quite obsolete.
  296. #      'md_PATH_PROG',
  297.      );
  298.  
  299. # Regexp to match the above macros.
  300. $obsolete_rx = '\b(' . join ('|', keys %obsolete_macros) . ')\b';
  301.  
  302. # This maps extensions onto language names.
  303. %extension_map = ();
  304.  
  305. # This maps languages names onto properties.
  306. %language_map = ();
  307.  
  308.  
  309.  
  310. # Initialize global constants and our list of languages that are
  311. # internally supported.
  312. &initialize_global_constants;
  313.  
  314. ®ister_language ('c', '', 1,
  315.             'c');
  316. ®ister_language ('cxx', 'CXXLINK', 0,
  317.             'c++', 'cc', 'cpp', 'cxx', 'C');
  318. ®ister_language ('objc', 'OBJCLINK', 0,
  319.                     'm');
  320. ®ister_language ('header', '', 0,
  321.             'h', 'H', 'hxx', 'h++', 'hh', 'hpp', 'inc');
  322. ®ister_language ('yacc', '', 1,
  323.             'y');
  324. ®ister_language ('yaccxx', 'CXXLINK', 0,
  325.             'y++', 'yy', 'yxx');
  326. ®ister_language ('lex', '', 1,
  327.             'l');
  328. ®ister_language ('lexxx', 'CXXLINK', 0,
  329.             'l++', 'll', 'lxx');
  330. ®ister_language ('asm', '', 0,
  331.             's', 'S');
  332. ®ister_language ('f77', 'F77LINK', 0,
  333.             'f', 'for', 'f90');
  334. ®ister_language ('ppf77', 'F77LINK', 0,
  335.             'F');
  336. ®ister_language ('ratfor', 'F77LINK', 0,
  337.             'r');
  338.  
  339.  
  340. # Parse command line.
  341. &parse_arguments (@ARGV);
  342.  
  343. # Do configure.ac scan only once.
  344. &scan_configure;
  345.  
  346. die "automake: no \`Makefile.am' found or specified\n"
  347.     if ! @input_files;
  348.  
  349. # If --generate-deps was given, we don't do anything else
  350. #
  351. if ($generate_deps)
  352. {
  353.     die "automake: Must specify --include-deps (or -i) when generating\n"
  354.     if $use_dependencies;
  355.     die "automake: Must provide --build-dir when generating\n"
  356.     if ! $build_directory;
  357.     die "automake: Must provide --srcdir-name when generating\n"
  358.     if ! $srcdir_name;
  359.  
  360.     open (GDEP, ">$output_directory/.dep_segment")
  361.     || die "automake: Could not open `$output_directory/.dep_segment': $!\n";
  362.  
  363.     &handle_dependencies;
  364.     print GDEP $output_rules;
  365.  
  366.     close(GDEP);
  367.     exit $exit_status;
  368. }
  369.  
  370. # Now do all the work on each file.
  371. foreach $am_file (@input_files)
  372. {
  373.     if (! -f ($am_file . '.am'))
  374.     {
  375.     &am_error ("\`" . $am_file . ".am' does not exist");
  376.     }
  377.     else
  378.     {
  379.      &generate_makefile ($output_files{$am_file}, $am_file);
  380.     }
  381. }
  382.  
  383. &am_conf_error ("AC_PROG_INSTALL must be used in \`$configure_ac'")
  384.     if (! $seen_prog_install);
  385.  
  386. exit $exit_status;
  387.  
  388.  
  389. ################################################################
  390.  
  391. # Parse command line.
  392. sub parse_arguments
  393. {
  394.     local (@arglist) = @_;
  395.  
  396.     # Start off as gnu.
  397.     &set_strictness ('gnu');
  398.  
  399.     while (@arglist)
  400.     {
  401.     if ($arglist[0] eq "--version")
  402.     {
  403.         print "automake (GNU $PACKAGE) $VERSION\n\n";
  404.         print "Copyright (C) 1999, 2001 Free Software Foundation, Inc.\n";
  405.         print "This is free software; see the source for copying conditions.  There is NO\n";
  406.         print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n";
  407.         print "Written by Tom Tromey <tromey\@redhat.com>\n";
  408.  
  409.         exit 0;
  410.     }
  411.     elsif ($arglist[0] eq "--help")
  412.     {
  413.         &usage;
  414.     }
  415.     elsif ($arglist[0] =~ /^--amdir=(.+)$/)
  416.     {
  417.         $am_dir = $1;
  418.     }
  419.     elsif ($arglist[0] eq '--amdir')
  420.     {
  421.         &require_argument (@arglist);
  422.         shift (@arglist);
  423.         $am_dir = $arglist[0];
  424.     }
  425.     elsif ($arglist[0] =~ /^--build-dir=(.+)$/)
  426.     {
  427.         # Must end in /.
  428.         $build_directory = $1 . '/';
  429.     }
  430.     elsif ($arglist[0] eq '--build-dir')
  431.     {
  432.         &require_argument (@arglist);
  433.         shift (@arglist);
  434.         # Must end in /.
  435.         $build_directory = $arglist[0] . '/';
  436.     }
  437.     elsif ($arglist[0] =~ /^--srcdir-name=(.+)$/)
  438.     {
  439.         $srcdir_name = $1;
  440.     }
  441.     elsif ($arglist[0] eq '--srcdir-name')
  442.     {
  443.         &require_argument (@arglist);
  444.         shift (@arglist);
  445.         $srcdir_name = $arglist[0];
  446.     }
  447.     elsif ($arglist[0] eq '--gnu')
  448.     {
  449.         &set_strictness ('gnu');
  450.     }
  451.     elsif ($arglist[0] eq '--gnits')
  452.     {
  453.         &set_strictness ('gnits');
  454.     }
  455.     elsif ($arglist[0] eq '--cygnus')
  456.     {
  457.         $cygnus_mode = 1;
  458.     }
  459.     elsif ($arglist[0] eq '--foreign')
  460.     {
  461.         &set_strictness ('foreign');
  462.     }
  463.     elsif ($arglist[0] eq '--include-deps' || $arglist[0] eq '-i')
  464.     {
  465.         $cmdline_use_dependencies = 0;
  466.     }
  467.     elsif ($arglist[0] eq '--generate-deps')
  468.     {
  469.         $generate_deps = 1;
  470.     }
  471.     elsif ($arglist[0] eq '--no-force')
  472.     {
  473.         $force_generation = 0;
  474.     }
  475.     elsif ($arglist[0] =~ /^--output-dir=(.*)$/)
  476.     {
  477.         # Set output directory.
  478.         $output_directory = $1;
  479.     }
  480.     elsif ($arglist[0] eq '--output-dir' || $arglist[0] eq '-o')
  481.     {
  482.         &require_argument (@arglist);
  483.         shift (@arglist);
  484.         $output_directory = $arglist[0];
  485.     }
  486.     elsif ($arglist[0] eq '--add-missing' || $arglist[0] eq '-a')
  487.     {
  488.         $add_missing = 1;
  489.     }
  490.     elsif ($arglist[0] eq '--copy' || $arglist[0] eq '-c')
  491.     {
  492.         $copy_missing = 1;
  493.     }
  494.     elsif ($arglist[0] eq '--verbose' || $arglist[0] eq '-v')
  495.     {
  496.         $verbose = 1;
  497.     }
  498.     elsif ($arglist[0] eq '--')
  499.     {
  500.         # Stop option processing.
  501.         shift (@arglist);
  502.         push (@input_files, @arglist);
  503.         last;
  504.     }
  505.     elsif ($arglist[0] =~ /^-/)
  506.     {
  507.         die "automake: unrecognized option -- \`$arglist[0]'\nTry \`automake --help' for more information.\n";
  508.     }
  509.     else
  510.     {
  511.         # Handle $local:$input syntax.  Note that we only examine
  512.         # the first ":" file to see if it is automake input; the
  513.         # rest are just taken verbatim.  We still keep all the
  514.         # files around for dependency checking, however.
  515.         local ($local, $input, @rest) = split (/:/, $arglist[0]);
  516.         if (! $input)
  517.         {
  518.         $input = $local;
  519.         }
  520.         else
  521.         {
  522.         # Strip .in; later on .am is tacked on.  That is how
  523.         # the automake input file is found.  Maybe not the
  524.         # best way, but it is easy to explain.  FIXME: should
  525.         # be error if .in is missing.
  526.         $input =~ s/\.in$//;
  527.         }
  528.         push (@input_files, $input);
  529.         $output_files{$input} = join (':', ($local, @rest));
  530.     }
  531.  
  532.     shift (@arglist);
  533.     }
  534.  
  535.     # Take global strictness from whatever we currently have set.
  536.     $default_strictness = $strictness;
  537.     $default_strictness_name = $strictness_name;
  538. }
  539.  
  540. # Ensure argument exists, or die.
  541. sub require_argument
  542. {
  543.     local ($arg, @arglist) = @_;
  544.     die "automake: no argument given for option \`$arg'\n"
  545.     if ! @arglist;
  546. }
  547.  
  548. ################################################################
  549.  
  550. # Generate a Makefile.in given the name of the corresponding Makefile and
  551. # the name of the file output by config.status.
  552. sub generate_makefile
  553. {
  554.     local ($output, $makefile) = @_;
  555.  
  556.     ($am_file_name = $makefile) =~ s/^.*\///;
  557.     $in_file_name = $am_file_name . '.in';
  558.     $am_file_name .= '.am';
  559.  
  560.     # $OUTPUT is encoded.  If it contains a ":" then the first element
  561.     # is the real output file, and all remaining elements are input
  562.     # files.  We don't scan or otherwise deal with these input file,
  563.     # other than to mark them as dependencies.  See scan_configure for
  564.     # details.
  565.     local (@secondary_inputs);
  566.     ($output, @secondary_inputs) = split (/:/, $output);
  567.  
  568.     &initialize_per_input;
  569.     $relative_dir = &dirname ($output);
  570.     $am_relative_dir = &dirname ($makefile);
  571.  
  572.     # At the toplevel directory, we might need config.guess, config.sub
  573.     # or libtool scripts (ltconfig and ltmain.sh).
  574.     if ($relative_dir eq '.')
  575.     {
  576.      # libtool requires some files.
  577.      &require_conf_file_with_conf_line ($libtool_line, $FOREIGN,
  578.                         @libtoolize_files)
  579.         if $seen_libtool;
  580.  
  581.         # AC_CANONICAL_HOST and AC_CANONICAL_SYSTEM need config.guess and
  582.         # config.sub.
  583.         &require_config_file ($FOREIGN, 'config.guess', 'config.sub')
  584.         if $seen_canonical;
  585.     }
  586.  
  587.     # We still need Makefile.in here, because sometimes the `dist'
  588.     # target doesn't re-run automake.
  589.     if ($am_relative_dir eq $relative_dir)
  590.     {
  591.     # Only distribute the files if they are in the same subdir as
  592.     # the generated makefile.
  593.     &push_dist_common ($in_file_name, $am_file_name);
  594.     }
  595.     push (@sources, '$(SOURCES)')
  596.     if &variable_defined ('SOURCES');
  597.     push (@objects, '$(OBJECTS)')
  598.     if &variable_defined ('OBJECTS');
  599.  
  600.     &read_main_am_file ($makefile . '.am');
  601.     if (&handle_options)
  602.     {
  603.     # Fatal error.  Just return, so we can continue with next file.
  604.     return;
  605.     }
  606.  
  607.     # Check first, because we might modify some state.
  608.     &check_cygnus;
  609.     &check_gnu_standards;
  610.     &check_gnits_standards;
  611.  
  612.     &handle_configure ($output, $makefile, @secondary_inputs);
  613.     &handle_gettext;
  614.     &handle_libraries;
  615.     &handle_ltlibraries;
  616.     &handle_programs;
  617.     &handle_scripts;
  618.  
  619.     &handle_built_sources;
  620.  
  621.     # This must be run after all the sources are scanned.
  622.     &finish_languages;
  623.  
  624.     # Re-init SOURCES and OBJECTS.  FIXME: other code shouldn't depend
  625.     # on this (but currently does).
  626.     $contents{'SOURCES'} = join (' ', @sources);
  627.     $contents{'OBJECTS'} = join (' ', @objects);
  628.  
  629.     &handle_multilib;
  630.     &handle_texinfo;
  631.     &handle_emacs_lisp;
  632.     &handle_java;
  633.     &handle_man_pages;
  634.     &handle_data;
  635.     &handle_headers;
  636.     &handle_subdirs;
  637.     &handle_tags;
  638.     &handle_minor_options;
  639.     &handle_dist ($makefile);
  640.     &handle_dependencies;
  641.     &handle_tests;
  642.     &handle_footer;
  643.     &handle_merge_targets ($output);
  644.     &handle_installdirs;
  645.     &handle_clean;
  646.     &handle_phony;
  647.  
  648.     &check_typos;
  649.  
  650.     if (! -d ($output_directory . '/' . $am_relative_dir))
  651.     {
  652.     mkdir ($output_directory . '/' . $am_relative_dir, 0755);
  653.     }
  654.  
  655.     local ($out_file) = $output_directory . '/' . $makefile . ".in";
  656.     if (! $force_generation && -e $out_file)
  657.     {
  658.     local ($am_time) = (stat ($makefile . '.am'))[9];
  659.     local ($in_time) = (stat ($out_file))[9];
  660.     # FIXME: should cache these times.
  661.     local ($conf_time) = (stat ($configure_ac))[9];
  662.     # FIXME: how to do unsigned comparison?
  663.     if ($am_time < $in_time || $am_time < $conf_time)
  664.     {
  665.         # No need to update.
  666.         return;
  667.     }
  668.     if (-f 'aclocal.m4')
  669.     {
  670.         local ($acl_time) = (stat _)[9];
  671.         return if ($am_time < $acl_time);
  672.     }
  673.     }
  674.  
  675.     if (! open (GM_FILE, "> " . $out_file))
  676.     {
  677.     warn "automake: ${am_file}.in: cannot write: $!\n";
  678.     $exit_status = 1;
  679.     return;
  680.     }
  681.     print "automake: creating ", $makefile, ".in\n" if $verbose;
  682.  
  683.     print GM_FILE $output_vars;
  684.     # We make sure that `all:' is the first target.
  685.     print GM_FILE $output_all;
  686.     print GM_FILE $output_header;
  687.     print GM_FILE $output_rules;
  688.     print GM_FILE $output_trailer;
  689.  
  690.     close (GM_FILE);
  691. }
  692.  
  693. ################################################################
  694.  
  695. # A helper which handles the logic of requiring a version number in
  696. # AUTOMAKE_OPTIONS.  Return 1 on error, 0 on success.
  697. sub version_check ($$$$)
  698. {
  699.     my ($rmajor, $rminor, $ralpha, $rfork) = ($1, $2, $3, $4);
  700.  
  701.     &prog_error ("version is incorrect: $VERSION")
  702.         if $VERSION !~ /(\d+)\.(\d+)([a-z]?)-?([A-Za-z0-9]+)?/;
  703.  
  704.     my ($tmajor, $tminor, $talpha, $tfork) = ($1, $2, $3, $4);
  705.  
  706.     $rfork ||= '';
  707.     $tfork ||= '';
  708.  
  709.     my $rminorminor = 0;
  710.     my $tminorminor = 0;
  711.  
  712.     # Some versions were labelled like `1.4-p3a'.  This is the same as
  713.     # an alpha release labelled `1.4.3a'.  However, a version like
  714.     # `1.4g' is the same as `1.4.99g'.  Yes, this sucks.  Moral:
  715.     # always listen to the users.
  716.     if ($rfork =~ /p([0-9]+)([a-z]?)/)
  717.     {
  718.         $rminorminor = $1;
  719.         # `1.4a-p3b' never existed.  But we'll accept it anyway.
  720.         $ralpha = $ralpha || $2 || '';
  721.         $rfork = '';
  722.     }
  723.     if ($tfork =~ /p([0-9]+)([a-z]?)/)
  724.     {
  725.         $tminorminor = $1;
  726.         # `1.4a-p3b' never existed.  But we'll accept it anyway.
  727.         $talpha = $talpha || $2 || '';
  728.         $tfork = '';
  729.     }
  730.  
  731.     $rminorminor = 99 if $ralpha ne '' && $rminorminor == 0;
  732.     $tminorminor = 99 if $talpha ne '' && $tminorminor == 0;
  733.  
  734.     # 2.0 is better than 1.0.
  735.     # 1.2 is better than 1.1.
  736.     # 1.2a is better than 1.2.
  737.     # If we require 3.4n-foo then we require something
  738.     # >= 3.4n, with the `foo' fork identifier.
  739.     # The $r* variables are what the user specified.
  740.     # The $t* variables denote automake itself.
  741.     if ($rmajor > $tmajor
  742.         || ($rmajor == $tmajor && $rminor > $tminor)
  743.         || ($rminor == $tminor && $rminor == $tminor
  744.            && $rminorminor > $tminorminor)
  745.         || ($rminor == $tminor && $rminor == $tminor
  746.            && $rminorminor == $tminorminor
  747.            && $ralpha gt $talpha)
  748.         || ($rfork ne '' && $rfork ne $tfork))
  749.     {
  750.         &am_line_error ('AUTOMAKE_OPTIONS',
  751.                         "require version $_, but have $VERSION");
  752.         return 1;
  753.     }
  754.  
  755.     return 0;
  756. }
  757.  
  758. # Handle AUTOMAKE_OPTIONS variable.  Return 1 on error, 0 otherwise.
  759. sub handle_options
  760. {
  761.     if (&variable_defined ('AUTOMAKE_OPTIONS'))
  762.     {
  763.     foreach (&variable_value_as_list ('AUTOMAKE_OPTIONS', ''))
  764.     {
  765.         $options{$_} = 1;
  766.         if ($_ eq 'gnits' || $_ eq 'gnu' || $_ eq 'foreign')
  767.         {
  768.         &set_strictness ($_);
  769.         }
  770.         elsif ($_ eq 'cygnus')
  771.         {
  772.         $cygnus_mode = 1;
  773.         }
  774.         elsif (/ansi2knr/)
  775.         {
  776.         # An option like "../lib/ansi2knr" is allowed.  With
  777.         # no path prefix, we assume the required programs are
  778.         # in this directory.  We save the actual option for
  779.         # later.
  780.         $options{'ansi2knr'} = $_;
  781.         }
  782.         elsif ($_ eq 'no-installman' || $_ eq 'no-installinfo'
  783.            || $_ eq 'dist-shar' || $_ eq 'dist-zip'
  784.            || $_ eq 'dist-tarZ' || $_ eq 'dejagnu'
  785.            || $_ eq 'no-texinfo.tex'
  786.            || $_ eq 'readme-alpha' || $_ eq 'check-news')
  787.         {
  788.         # Explicitly recognize these.
  789.         }
  790.         elsif ($_ eq 'no-dependencies')
  791.         {
  792.         $use_dependencies = 0;
  793.         }
  794.         elsif (/([0-9]+)\.([0-9]+)([a-z]?)(-[A-Za-z0-9]+)?/)
  795.         {
  796.         # Got a version number.
  797.  
  798.                 if (version_check ($1, $2, $3, $4))
  799.                 {
  800.                     return 1;
  801.         }
  802.         }
  803.         else
  804.         {
  805.         &am_line_error ('AUTOMAKE_OPTIONS',
  806.                 "option \`" . $_ . "\' not recognized");
  807.         }
  808.     }
  809.     }
  810.  
  811.     if ($strictness == $GNITS)
  812.     {
  813.     $options{'readme-alpha'} = 1;
  814.     $options{'check-news'} = 1;
  815.     }
  816.  
  817.     return 0;
  818. }
  819.  
  820. # Return object extension.  Just once, put some code into the output.
  821. # Argument is the name of the output file
  822. sub get_object_extension
  823. {
  824.     local ($out) = @_;
  825.  
  826.     # Maybe require libtool library object files.
  827.     local ($extension) = '.o';
  828.     $extension = '.$(OBJEXT)' if $seen_objext;
  829.     $extension = '.lo' if ($out =~ /\.la$/);
  830.  
  831.     if (! $included_generic_compile)
  832.     {
  833.     # Boilerplate.
  834.     local ($xform) = '';
  835.     if (&variable_defined ('CONFIG_HEADER'))
  836.     {
  837.         local ($one_hdr);
  838.         foreach $one_hdr (split (' ', &variable_value ('CONFIG_HEADER')))
  839.         {
  840.         local ($var);
  841.         ($var = &dirname ($one_hdr)) =~ s/(\W)/\\$1/g;
  842.         $xform .= ' ' if $xform;
  843.         $xform .= '-I' . $var;
  844.         }
  845.     }
  846.     $xform = 's/\@CONFIG_INCLUDE_SPEC\@/' . $xform . '/go;';
  847.     $output_vars .= &file_contents_with_transform ($xform,
  848.                                'comp-vars');
  849.  
  850.     $xform = (($use_dependencies
  851.            ? 's/^NOTDEPEND.*$//;'
  852.            : 's/^NOTDEPEND//;')
  853.           . ($seen_objext ? 's/^OBJEXT//;' : 's/^OBJEXT.*$//;'));
  854.     $output_rules .= &file_contents_with_transform ($xform, 'compile');
  855.  
  856.     &push_phony_cleaners ('compile');
  857.  
  858.     # If using X, include some extra variable definitions.  NOTE
  859.     # we don't want to force these into CFLAGS or anything,
  860.     # because not all programs will necessarily use X.
  861.     if ($seen_path_xtra)
  862.     {
  863.         local ($var);
  864.         foreach $var ('X_CFLAGS', 'X_LIBS', 'X_EXTRA_LIBS', 'X_PRE_LIBS')
  865.         {
  866.         &define_configure_variable ($var);
  867.         }
  868.     }
  869.  
  870.     push (@suffixes, '.c', '.o', '.S', '.s');
  871.     push (@suffixes, '.obj') if $seen_objext;
  872.     push (@clean, 'compile');
  873.  
  874.     $included_generic_compile = 1;
  875.     }
  876.  
  877.     if ($seen_libtool && ! $included_libtool_compile)
  878.     {
  879.     # Output the libtool compilation rules.
  880.     $output_rules .=
  881.         &file_contents_with_transform
  882.         ($use_dependencies ? 's/^NOTDEPEND.*$//;' : 's/^NOTDEPEND//;',
  883.          'libtool');
  884.  
  885.     &push_phony_cleaners ('libtool');
  886.  
  887.     push (@suffixes, '.lo');
  888.     push (@clean, 'libtool');
  889.  
  890.     $included_libtool_compile = 1;
  891.     }
  892.  
  893.     # Check for automatic de-ANSI-fication.
  894.     if (defined $options{'ansi2knr'})
  895.     {
  896.     $extension = '$U' . $extension;
  897.     if (! $included_knr_compile)
  898.     {
  899.         if (! $am_c_prototypes)
  900.         {
  901.         &am_line_error ('AUTOMAKE_OPTIONS',
  902.                 "option \`ansi2knr' in use but \`AM_C_PROTOTYPES' not in \`$configure_ac'");
  903.         &keyed_aclocal_warning ('AM_C_PROTOTYPES');
  904.         # Only give this error once.
  905.         $am_c_prototypes = 1;
  906.         }
  907.  
  908.         # Only require ansi2knr files if they should appear in
  909.         # this directory.
  910.         if ($options{'ansi2knr'} eq 'ansi2knr')
  911.         {
  912.         &require_file_with_line ('AUTOMAKE_OPTIONS', $FOREIGN,
  913.                      'ansi2knr.c', 'ansi2knr.1');
  914.         $output_rules .= &file_contents ('kr-extra');
  915.         push (@clean, 'krextra');
  916.         &push_phony_cleaners ('krextra');
  917.         }
  918.  
  919.         # Generate rules to build ansi2knr.  If it is in some
  920.         # other directory, then generate dependencies but have the
  921.         # rule just run elsewhere.
  922.         $objext = $seen_objext ? ".$(OBJEXT)" : ".o";
  923.         $output_rules .= ($options{'ansi2knr'} . ': '
  924.                   . $options{'ansi2knr'} . $objext . "\n");
  925.         if ($options{'ansi2knr'} eq 'ansi2knr')
  926.         {
  927.         $output_rules .= ("\t\$(LINK) ansi2knr" . $objext
  928.                   . " \$(LIBS)\n"
  929.                   . "ansi2knr" . $objext
  930.                   . ": \$(CONFIG_HEADER)\n\n");
  931.         }
  932.         else
  933.         {
  934.         $output_rules .= ("\tcd " . &dirname ($options{'ansi2knr'})
  935.                   . " && \$(MAKE) \$(AM_MAKEFLAGS) "
  936.                   . "ansi2knr\n\n");
  937.         # This is required for non-GNU makes.
  938.             $output_rules .= ($options{'ansi2knr'} . $objext . ":\n");
  939.         $output_rules .= ("\tcd " . &dirname ($options{'ansi2knr'})
  940.                   . " && \$(MAKE) \$(AM_MAKEFLAGS)"
  941.                   . " ansi2knr" . $objext . "\n\n");
  942.         }
  943.  
  944.         # Make sure ansi2knr can be found: if no path specified,
  945.         # specify "./".
  946.         if ($options{'ansi2knr'} eq 'ansi2knr')
  947.         {
  948.         # Substitution from AM_C_PROTOTYPES.  This makes it be
  949.         # built only when necessary.
  950.         &define_configure_variable ('ANSI2KNR');
  951.         # ansi2knr needs to be built before subdirs, so unshift it.
  952.         unshift (@all, '$(ANSI2KNR)');
  953.         }
  954.         else
  955.         {
  956.         # Found in another directory.
  957.         &define_variable ("ANSI2KNR", $options{'ansi2knr'});
  958.         }
  959.  
  960.         $output_rules .= &file_contents ('clean-kr');
  961.  
  962.         push (@clean, 'kr');
  963.         &push_phony_cleaners ('kr');
  964.  
  965.         $included_knr_compile = 1;
  966.     }
  967.     }
  968.  
  969.     return $extension;
  970. }
  971.  
  972. # Call finish function for each language that was used.
  973. sub finish_languages
  974. {
  975.     local ($ext, $name, $lang, %done);
  976.     local ($non_c) = 1;
  977.     foreach $ext (sort keys %extension_seen)
  978.     {
  979.     $lang = $extension_map{$ext};
  980.     next if defined $done{$lang};
  981.     $done{$lang} = 1;
  982.     $non_c = 0 if $lang !~ /(objc|cxx|f77|ratfor)$/;
  983.  
  984.     # Compute the function name of the finisher and then call it.
  985.     $name = 'lang_' . $lang . '_finish';
  986.     do $name ();
  987.     }
  988.  
  989.     # If the project is entirely C++ or entirely Fortran 77, don't
  990.     # bother with the C stuff.  But if anything else creeps in, then use
  991.     # it.
  992.     if (! $non_c || scalar keys %suffix_rules > 0)
  993.     {
  994.     local ($ltcompile, $ltlink) = &libtool_compiler;
  995.  
  996.     &define_configure_variable ('CFLAGS');
  997.     &define_variable ('COMPILE',
  998.               '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)');
  999.     &define_variable ('LTCOMPILE',
  1000.               $ltcompile .
  1001.               '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)')
  1002.         if ($seen_libtool);
  1003.     &define_variable ('CCLD', '$(CC)');
  1004.     &define_variable ('LINK', $ltlink . '$(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@');
  1005.     }
  1006. }
  1007.  
  1008. # Output a rule to build from a YACC source.  The output from YACC is
  1009. # compiled with C or C++, depending on the extension of the YACC file.
  1010. sub output_yacc_build_rule
  1011. {
  1012.     local ($yacc_suffix, $use_ylwrap, $c_suffix) = @_;
  1013.  
  1014.     local ($suffix);
  1015.     ($suffix = $yacc_suffix) =~ tr/y/c/;
  1016.     push (@suffixes, $yacc_suffix, $suffix);
  1017.  
  1018.     # Generate rule for c/c++.
  1019.     $output_rules .= "$yacc_suffix$suffix:\n\t";
  1020.  
  1021.     if ($use_ylwrap)
  1022.     {
  1023.     $output_rules .= ('$(SHELL) $(YLWRAP)'
  1024.               . ' "$(YACC)" $< y.tab.c $*' . $suffix
  1025.               . ' y.tab.h $*.h -- $(AM_YFLAGS) $(YFLAGS)');
  1026.     }
  1027.     else
  1028.     {
  1029.     $output_rules .= ('$(YACC) $(AM_YFLAGS) $(YFLAGS) $< && mv y.tab.c $*'
  1030.               . $suffix . "\n"
  1031.               . "\tif test -f y.tab.h; then \\\n"
  1032.               . "\tif cmp -s y.tab.h \$*.h; then rm -f y.tab.h; else mv y.tab.h \$*.h; fi; \\\n"
  1033.               . "\telse :; fi");
  1034.     }
  1035.     $output_rules .= "\n";
  1036. }
  1037.  
  1038. sub output_lex_build_rule
  1039. {
  1040.     local ($lex_suffix, $use_ylwrap) = @_;
  1041.     local ($c_suffix);
  1042.  
  1043.     ($c_suffix = $lex_suffix) =~ tr/l/c/;
  1044.     push (@suffixes, $lex_suffix);
  1045.     &define_configure_variable ('LEX_OUTPUT_ROOT');
  1046.     &define_configure_variable ('LEXLIB');
  1047.     $output_rules .= "$lex_suffix$c_suffix:\n\t";
  1048.  
  1049.     if ($use_ylwrap)
  1050.     {
  1051.         # Is the $@ correct here?  If so, why not use it in the ylwrap
  1052.         # build rule for yacc above?
  1053.     $output_rules .= '$(SHELL) $(YLWRAP)'
  1054.         . ' "$(LEX)" $< $(LEX_OUTPUT_ROOT).c $@ -- $(AM_LFLAGS) $(LFLAGS)';
  1055.     }
  1056.     else
  1057.     {
  1058.     $output_rules .= '$(LEX) $(AM_LFLAGS) $(LFLAGS) $< && mv $(LEX_OUTPUT_ROOT).c $@';
  1059.     }
  1060.     $output_rules .= "\n";
  1061. }
  1062.  
  1063.  
  1064. # Check to make sure a source defined in LIBOBJS is not explicitly
  1065. # mentioned.  This is a separate function (as opposed to being inlined
  1066. # in handle_source_transform) because it isn't always appropriate to
  1067. # do this check.
  1068. sub check_libobjs_sources
  1069. {
  1070.     local ($one_file, $unxformed) = @_;
  1071.  
  1072.     local ($prefix, $file, @files);
  1073.     foreach $prefix ('', 'EXTRA_')
  1074.     {
  1075.     if (&variable_defined ($prefix . $one_file . '_SOURCES'))
  1076.     {
  1077.         @files = &variable_value_as_list (($prefix
  1078.                            . $one_file . '_SOURCES'),
  1079.                           'all');
  1080.     }
  1081.     elsif ($prefix eq '')
  1082.     {
  1083.         @files = ($unxformed . '.c');
  1084.     }
  1085.     else
  1086.     {
  1087.         next;
  1088.     }
  1089.  
  1090.     foreach $file (@files)
  1091.     {
  1092.         if (defined $libsources{$file})
  1093.         {
  1094.         &am_line_error ($prefix . $one_file . '_SOURCES',
  1095.                 "automatically discovered file \`$file' should not be explicitly mentioned");
  1096.         }
  1097.     }
  1098.     }
  1099. }
  1100.  
  1101. # Does much of the actual work for handle_source_transform.
  1102. # Arguments are:
  1103. #   object extension (e.g., `$U.lo')
  1104. #   list of source files to transform
  1105. # Result is a list
  1106. #   first element is name of linker to use (empty string for default linker)
  1107. #   remaining elements are names of objects
  1108. sub handle_single_transform_list
  1109. {
  1110.     local ($obj, @files) = @_;
  1111.     local (@result) = ();
  1112.     local ($nonansi_obj) = $obj;
  1113.     $nonansi_obj =~ s/_//g;
  1114.     local (%linkers_used) = ();
  1115.     if (@files > 0)
  1116.     {
  1117.     # Turn sources into objects.
  1118.     foreach (@files)
  1119.     {
  1120.         # Skip things that look like configure substitutions.
  1121.         next if /^\@.*\@$/;
  1122.  
  1123.         # We don't support source files in a subdirectory.  The
  1124.         # reason is that we'd want to put the .o into a similar
  1125.         # subdirectory, but this means finding a good way to make
  1126.         # the directory.  Later.
  1127.         if (/\//)
  1128.         {
  1129.         &am_error
  1130.             ("not supported: source file `$_' is in subdirectory");
  1131.         next;
  1132.         }
  1133.  
  1134.         # Split file name into base and extension.
  1135.         local ($base, $extension, $linker, $object);
  1136.         next if ! /^(.*)\.(.*)$/;
  1137.         $base = $1;
  1138.         $extension = $2;
  1139.  
  1140.         local ($lang) = $extension_map{$extension};
  1141.         if ($lang)
  1142.         {
  1143.         &saw_extension ($extension);
  1144.         # Found the language, so see what it says.
  1145.         local ($subr) = 'lang_' . $lang . '_rewrite';
  1146.         # Note: computed subr call.
  1147.         local ($r) = do $subr ($base, $extension);
  1148.         # Skip this entry if we were asked not to process it.
  1149.         next if ! $r;
  1150.  
  1151.         # Now extract linker and other info.
  1152.         $linker = $language_map{$lang . '-linker'};
  1153.  
  1154.         if ($language_map{$lang . '-ansi-p'})
  1155.         {
  1156.             $object = $base . $obj;
  1157.         }
  1158.         else
  1159.         {
  1160.             $object = $base . $nonansi_obj;
  1161.         }
  1162.         }
  1163.          elsif ($extension =~ /^$source_suffix_pattern$/)
  1164.          {
  1165.         # We just rewrite it.  Maybe we should do more.
  1166.         $object = $base . '.' . $suffix_rules{$extension};
  1167.         $linker = '';
  1168.          }
  1169.         else
  1170.         {
  1171.         # No error message here.  Used to have one, but it was
  1172.         # very unpopular.
  1173.         next;
  1174.         }
  1175.  
  1176.         $linkers_used{$linker} = 1;
  1177.  
  1178.         push (@result, $object);
  1179.  
  1180.         # Transform .o or $o file into .P file (for automatic
  1181.         # dependency code).
  1182.         $dep_files{'.deps/' . $base . '.P'} = 1;
  1183.     }
  1184.     }
  1185.  
  1186.     return (&resolve_linker (%linkers_used), @result);
  1187. }
  1188.  
  1189. # Handle SOURCE->OBJECT transform for one program or library.
  1190. # Arguments are:
  1191. #   canonical (transformed) name of object to build
  1192. #   actual name of object to build
  1193. #   object extension (ie either `.o' or `$o'.
  1194. # Return result is name of linker variable that must be used.
  1195. # Empty return means just use `LINK'.
  1196. sub handle_source_transform
  1197. {
  1198.     # one_file is canonical name.  unxformed is given name.  obj is
  1199.     # object extension.
  1200.     local ($one_file, $unxformed, $obj) = @_;
  1201.  
  1202.     local ($linker) = '';
  1203.  
  1204.     if (&variable_defined ($one_file . "_OBJECTS"))
  1205.     {
  1206.     &am_line_error ($one_file . '_OBJECTS',
  1207.             $one_file . '_OBJECTS', 'should not be defined');
  1208.     # No point in continuing.
  1209.     return;
  1210.     }
  1211.  
  1212.     local (@files, @result, $prefix, $temp);
  1213.     foreach $prefix ('', 'EXTRA_')
  1214.     {
  1215.     @files = ();
  1216.     local ($var) = $prefix . $one_file . "_SOURCES";
  1217.     if (&variable_defined ($var))
  1218.     {
  1219.         push (@sources, '$(' . $prefix . $one_file . "_SOURCES)");
  1220.         push (@objects, '$(' . $prefix . $one_file . "_OBJECTS)")
  1221.         unless $prefix eq 'EXTRA_';
  1222.         local (@conds) = &variable_conditions ($var);
  1223.         if (! @conds)
  1224.         {
  1225.         @files = &variable_value_as_list ($var, '');
  1226.         }
  1227.         else
  1228.         {
  1229.         local ($cond);
  1230.         foreach $cond (@conds)
  1231.         {
  1232.             @files = &variable_value_as_list ($var, $cond);
  1233.             ($temp, @result) = &handle_single_transform_list ($obj,
  1234.                                       @files);
  1235.             $linker = $temp if $linker eq '';
  1236.  
  1237.             # Define _OBJECTS conditionally.
  1238.             &define_pretty_variable ($one_file . '_OBJECTS', $cond,
  1239.                          @result)
  1240.             unless $prefix eq 'EXTRA_';
  1241.         }
  1242.  
  1243.         next;
  1244.         }
  1245.     }
  1246.     elsif ($prefix eq '')
  1247.     {
  1248.         &define_variable ($one_file . "_SOURCES", $unxformed . ".c");
  1249.         push (@sources, $unxformed . '.c');
  1250.         push (@objects, $unxformed . $obj);
  1251.         push (@files, $unxformed . '.c');
  1252.     }
  1253.  
  1254.     ($temp, @result) = &handle_single_transform_list ($obj, @files);
  1255.     $linker = $temp if $linker eq '';
  1256.     &define_pretty_variable ($one_file . "_OBJECTS", '', @result)
  1257.         unless $prefix eq 'EXTRA_';
  1258.     }
  1259.  
  1260.     return $linker;
  1261. }
  1262.  
  1263. # Handle the BUILT_SOURCES variable.
  1264. sub handle_built_sources
  1265. {
  1266.     return unless &variable_defined ('BUILT_SOURCES');
  1267.  
  1268.     local (@sources) = &variable_value_as_list ('BUILT_SOURCES', 'all');
  1269.     local ($s);
  1270.     foreach $s (@sources)
  1271.     {
  1272.     if (/^\@.*\@$/)
  1273.     {
  1274.         # FIXME: is this really the right thing to do?
  1275.         &am_line_error ('BUILT_SOURCES',
  1276.                 "\`BUILT_SOURCES' should not contain a configure substitution");
  1277.         last;
  1278.     }
  1279.     }
  1280.  
  1281.     # We don't care about the return value of this function.  We just
  1282.     # want to make sure to update %dep_files with the contents of
  1283.     # BUILT_SOURCES.
  1284.     &handle_single_transform_list (".o", @sources);
  1285. }
  1286.  
  1287. # Special-case @ALLOCA@ and @LIBOBJS@ in _LDADD or _LIBADD variables.
  1288. # Also, generate _DEPENDENCIES variable if appropriate.
  1289. # Arguments are:
  1290. #   transformed name of object being built, or empty string if no object
  1291. #   name of _LDADD/_LIBADD-type variable to examine
  1292. #   boolean (lex_seen) which is true if a lex source file was seen in this
  1293. #     object.  valid only for LDADDs, not LIBADDs.
  1294. # Returns 1 if LIBOBJS seen, 0 otherwise.
  1295. sub handle_lib_objects
  1296. {
  1297.     local ($xname, $var, $lex_seen) = @_;
  1298.     local ($ret);
  1299.  
  1300.     die "automake: programming error 1 in handle_lib_objects\n"
  1301.     if ! &variable_defined ($var);
  1302.  
  1303.     die "automake: programming error 2 in handle_lib_objects\n"
  1304.     if $lex_seen && $var =~ /LIBADD/;
  1305.  
  1306.     local (@conds) = &variable_conditions ($var);
  1307.     if (! @conds)
  1308.     {
  1309.     $ret = &handle_lib_objects_cond ($xname, $var, $lex_seen, '');
  1310.     }
  1311.     else
  1312.     {
  1313.     local ($cond);
  1314.     $ret = 0;
  1315.     foreach $cond (@conds)
  1316.     {
  1317.         if (&handle_lib_objects_cond ($xname, $var, $lex_seen, $cond))
  1318.         {
  1319.         $ret = 1;
  1320.         }
  1321.     }
  1322.     }
  1323.  
  1324.     return $ret;
  1325. }
  1326.  
  1327. # Subroutine of handle_lib_objects: handle a particular condition.
  1328. sub handle_lib_objects_cond
  1329. {
  1330.     local ($xname, $var, $lex_seen, $cond) = @_;
  1331.  
  1332.     # We recognize certain things that are commonly put in LIBADD or
  1333.     # LDADD.
  1334.     local ($lsearch);
  1335.     local (@dep_list) = ();
  1336.  
  1337.     local ($seen_libobjs) = 0;
  1338.     local ($flagvar) = 0;
  1339.  
  1340.     foreach $lsearch (&variable_value_as_list ($var, $cond))
  1341.     {
  1342.     # Skip -lfoo and -Ldir; these are explicitly allowed.
  1343.     next if $lsearch =~ /^-[lL]/;
  1344.     if (! $flagvar && $lsearch =~ /^-/)
  1345.     {
  1346.         if ($var =~ /^(.*)LDADD$/)
  1347.         {
  1348.         &am_line_error ($var, "linker flags such as \`$lsearch' belong in \`${1}LDFLAGS");
  1349.         }
  1350.         else
  1351.         {
  1352.         # Only get this error once.
  1353.         $flagvar = 1;
  1354.         &am_line_error ($var, "you cannot use linker flags such as \`$lsearch' in \`$var'");
  1355.         }
  1356.     }
  1357.  
  1358.     # Assume we have a file of some sort, and push it onto the
  1359.     # dependency list.  Autoconf substitutions are not pushed;
  1360.     # rarely is a new dependency substituted into (eg) foo_LDADD
  1361.     # -- but "bad things (eg -lX11) are routinely substituted.
  1362.     # Note that LIBOBJS and ALLOCA are exceptions to this rule,
  1363.     # and handled specially below.
  1364.     push (@dep_list, $lsearch)
  1365.         unless $lsearch =~ /^\@.*\@$/;
  1366.  
  1367.     # Automatically handle @LIBOBJS@ and @ALLOCA@.  Basically this
  1368.     # means adding entries to dep_files.
  1369.     if ($lsearch =~ /^\@(LT)?LIBOBJS\@$/)
  1370.     {
  1371.         push (@dep_list, $lsearch);
  1372.         $seen_libobjs = 1;
  1373.         if (! keys %libsources)
  1374.         {
  1375.         &am_line_error ($var, "\@$1" . "LIBOBJS\@ seen but never set in \`$configure_ac'");
  1376.         }
  1377.  
  1378.         local ($iter, $rewrite);
  1379.         foreach $iter (keys %libsources)
  1380.         {
  1381.         if ($iter =~ /\.([cly])$/)
  1382.         {
  1383.             &saw_extension ($1);
  1384.             &saw_extension ('c');
  1385.         }
  1386.  
  1387.         if ($iter =~ /\.h$/)
  1388.         {
  1389.             &require_file_with_line ($var, $FOREIGN, $iter);
  1390.         }
  1391.         elsif ($iter ne 'alloca.c')
  1392.         {
  1393.             ($rewrite = $iter) =~ s/\.c$/.P/;
  1394.             $dep_files{'.deps/' . $rewrite} = 1;
  1395.             &require_file_with_line ($var, $FOREIGN, $iter);
  1396.         }
  1397.         }
  1398.     }
  1399.     elsif ($lsearch =~ /^\@(LT)?ALLOCA\@$/)
  1400.     {
  1401.         push (@dep_list, $lsearch);
  1402.         &am_line_error ($var,
  1403.                 "\@$1" . "ALLOCA\@ seen but \`AC_FUNC_ALLOCA' not in \`$configure_ac'")
  1404.         if ! defined $libsources{'alloca.c'};
  1405.         $dep_files{'.deps/alloca.P'} = 1;
  1406.         &require_file_with_line ($var, $FOREIGN, 'alloca.c');
  1407.         &saw_extension ('c');
  1408.     }
  1409.     }
  1410.  
  1411.     if ($xname ne '' && ! &variable_defined ($xname . '_DEPENDENCIES', $cond))
  1412.     {
  1413.     &define_pretty_variable ($xname . '_DEPENDENCIES', $cond, @dep_list);
  1414.     }
  1415.  
  1416.     return $seen_libobjs;
  1417. }
  1418.  
  1419. # Canonicalize a name, and check to make sure the non-canonical name
  1420. # is never used.  Returns canonical name.  Arguments are name and a
  1421. # list of suffixes to check for.
  1422. sub check_canonical_spelling
  1423. {
  1424.     local ($name, @suffixes) = @_;
  1425.     local ($xname, $xt);
  1426.  
  1427.     ($xname = $name) =~ tr/A-Za-z0-9_/_/c;
  1428.     if ($xname ne $name)
  1429.     {
  1430.     local ($xt);
  1431.     foreach $xt (@suffixes)
  1432.     {
  1433.         &am_line_error ($name . $xt,
  1434.                 "invalid variable \`" . $name . $xt
  1435.                 . "'; should be \`" . $xname . $xt . "'")
  1436.         if &variable_defined ($name . $xt);
  1437.     }
  1438.     }
  1439.  
  1440.     return $xname;
  1441. }
  1442.  
  1443. # Handle C programs.
  1444. sub handle_programs
  1445. {
  1446.     local (@proglist) = &am_install_var ('-clean',
  1447.                      'progs', 'PROGRAMS',
  1448.                      'bin', 'sbin', 'libexec', 'pkglib',
  1449.                      'noinst', 'check');
  1450.     return if ! @proglist;
  1451.  
  1452.     # If a program is installed, this is required.  We only want this
  1453.     # error to appear once.
  1454.     &am_conf_error ("AC_ARG_PROGRAM must be used in \`$configure_ac'")
  1455.     unless $seen_arg_prog;
  1456.     $seen_arg_prog = 1;
  1457.  
  1458.     local ($one_file, $xname, $munge);
  1459.  
  1460.     local ($seen_libobjs) = 0;
  1461.     foreach $one_file (@proglist)
  1462.     {
  1463.     local ($obj) = &get_object_extension ($one_file);
  1464.  
  1465.     # Canonicalize names and check for misspellings.
  1466.     $xname = &check_canonical_spelling ($one_file, '_LDADD', '_LDFLAGS',
  1467.                         '_SOURCES', '_OBJECTS',
  1468.                         '_DEPENDENCIES');
  1469.  
  1470.     # FIXME: Using a trick to figure out if any lex sources appear
  1471.     # in our program; should use some cleaner method.
  1472.     local ($lex_num) = scalar (keys %lex_sources);
  1473.     local ($linker) = &handle_source_transform ($xname, $one_file, $obj);
  1474.     local ($lex_file_seen) = (scalar (keys %lex_sources) > $lex_num);
  1475.  
  1476.     local ($xt) = '';
  1477.     if (&variable_defined ($xname . "_LDADD"))
  1478.     {
  1479.         if (&handle_lib_objects ($xname, $xname . '_LDADD',
  1480.                      $lex_file_seen))
  1481.         {
  1482.         $seen_libobjs = 1;
  1483.         }
  1484.         $lex_file_seen = 0;
  1485.         $xt = '_LDADD';
  1486.     }
  1487.     else
  1488.     {
  1489.         # User didn't define prog_LDADD override.  So do it.
  1490.         &define_variable ($xname . '_LDADD', '$(LDADD)');
  1491.  
  1492.         # This does a bit too much work.  But we need it to
  1493.         # generate _DEPENDENCIES when appropriate.
  1494.         if (&variable_defined ('LDADD'))
  1495.         {
  1496.         if (&handle_lib_objects ($xname, 'LDADD', $lex_file_seen))
  1497.         {
  1498.             $seen_libobjs = 1;
  1499.         }
  1500.         $lex_file_seen = 0;
  1501.         }
  1502.         elsif (! &variable_defined ($xname . '_DEPENDENCIES'))
  1503.         {
  1504.         &define_variable ($xname . '_DEPENDENCIES', '');
  1505.         }
  1506.         $xt = '_SOURCES'
  1507.     }
  1508.  
  1509.     if (&variable_defined ($xname . '_LIBADD'))
  1510.     {
  1511.         &am_line_error ($xname . '_LIBADD',
  1512.                 "use \`" . $xname . "_LDADD', not \`"
  1513.                 . $xname . "_LIBADD'");
  1514.     }
  1515.  
  1516.     if (! &variable_defined ($xname . '_LDFLAGS'))
  1517.     {
  1518.         # Define the prog_LDFLAGS variable.
  1519.         &define_variable ($xname . '_LDFLAGS', '');
  1520.     }
  1521.  
  1522.     # Determine program to use for link.
  1523.     local ($xlink);
  1524.     if (&variable_defined ($xname . '_LINK'))
  1525.     {
  1526.         $xlink = $xname . '_LINK';
  1527.     }
  1528.     else
  1529.     {
  1530.         $xlink = $linker ? $linker : 'LINK';
  1531.     }
  1532.  
  1533.     local ($xexe);
  1534.     if ($seen_exeext && $one_file !~ /\./)
  1535.     {
  1536.         $xexe = 's/\@EXEEXT\@/\$(EXEEXT)/g;';
  1537.     }
  1538.     else
  1539.     {
  1540.         $xexe = 's/\@EXEEXT\@//g;';
  1541.     }
  1542.  
  1543.     $output_rules .=
  1544.         &file_contents_with_transform
  1545.         ('s/\@PROGRAM\@/' . $one_file . '/go;'
  1546.          . 's/\@XPROGRAM\@/' . $xname . '/go;'
  1547.          . 's/\@XLINK\@/' . $xlink . '/go;'
  1548.          . $xexe,
  1549.          'program');
  1550.     }
  1551.  
  1552.     if (&variable_defined ('LDADD') && &handle_lib_objects ('', 'LDADD', 0))
  1553.     {
  1554.     $seen_libobjs = 1;
  1555.     }
  1556.  
  1557.     if ($seen_libobjs)
  1558.     {
  1559.     foreach $one_file (@proglist)
  1560.     {
  1561.         # Canonicalize names.
  1562.         ($xname = $one_file) =~ tr/A-Za-z0-9_/_/c;
  1563.  
  1564.         if (&variable_defined ($xname . '_LDADD'))
  1565.         {
  1566.         &check_libobjs_sources ($xname, $xname . '_LDADD');
  1567.         }
  1568.         elsif (&variable_defined ('LDADD'))
  1569.         {
  1570.         &check_libobjs_sources ($xname, 'LDADD');
  1571.         }
  1572.     }
  1573.     }
  1574. }
  1575.  
  1576.  
  1577. # Handle libraries.
  1578. sub handle_libraries
  1579. {
  1580.     local (@liblist) = &am_install_var ('-clean',
  1581.                     'libs', 'LIBRARIES',
  1582.                     'lib', 'pkglib', 'noinst', 'check');
  1583.     return if ! @liblist;
  1584.  
  1585.     local (%valid) = &am_primary_prefixes ('LIBRARIES', 'lib', 'pkglib',
  1586.                        'noinst', 'check');
  1587.     if (! defined $configure_vars{'RANLIB'})
  1588.     {
  1589.     local ($key);
  1590.     foreach $key (keys %valid)
  1591.     {
  1592.         if (&variable_defined ($key . '_LIBRARIES'))
  1593.         {
  1594.         &am_line_error ($key . '_LIBRARIES', "library used but \`RANLIB' not defined in \`$configure_ac'");
  1595.         # Only get this error once.  If this is ever printed,
  1596.         # we have a bug.
  1597.         $configure_vars{'RANLIB'} = 'BUG';
  1598.         last;
  1599.         }
  1600.     }
  1601.     }
  1602.  
  1603.     local ($onelib);
  1604.     local ($munge);
  1605.     local ($xlib);
  1606.     local ($seen_libobjs) = 0;
  1607.     foreach $onelib (@liblist)
  1608.     {
  1609.     # Check that the library fits the standard naming convention.
  1610.     if ($onelib !~ /^lib.*\.a$/)
  1611.     {
  1612.         # FIXME should put line number here.  That means mapping
  1613.         # from library name back to variable name.
  1614.         &am_error ("\`$onelib' is not a standard library name");
  1615.     }
  1616.  
  1617.     local ($obj) = &get_object_extension ($onelib);
  1618.  
  1619.     # Canonicalize names and check for misspellings.
  1620.     $xlib = &check_canonical_spelling ($onelib, '_LIBADD', '_SOURCES',
  1621.                        '_OBJECTS', '_DEPENDENCIES');
  1622.  
  1623.     if (&variable_defined ($xlib . '_LIBADD'))
  1624.     {
  1625.         if (&handle_lib_objects ($xlib, $xlib . '_LIBADD', 0))
  1626.         {
  1627.         $seen_libobjs = 1;
  1628.         }
  1629.     }
  1630.     else
  1631.     {
  1632.         # Generate support for conditional object inclusion in
  1633.         # libraries.
  1634.         &define_variable ($xlib . "_LIBADD", '');
  1635.     }
  1636.  
  1637.     if (&variable_defined ($xlib . '_LDADD'))
  1638.     {
  1639.         &am_line_error ($xlib . '_LDADD',
  1640.                 "use \`" . $xlib . "_LIBADD', not \`"
  1641.                 . $xlib . "_LDADD'");
  1642.     }
  1643.  
  1644.     # Make sure we at look at this.
  1645.     &examine_variable ($xlib . '_DEPENDENCIES');
  1646.  
  1647.     &handle_source_transform ($xlib, $onelib, $obj);
  1648.  
  1649.     $output_rules .=
  1650.         &file_contents_with_transform ('s/\@LIBRARY\@/' . $onelib . '/go;'
  1651.                        . 's/\@XLIBRARY\@/'
  1652.                        . $xlib . '/go;',
  1653.                        'library');
  1654.     }
  1655.  
  1656.     if ($seen_libobjs)
  1657.     {
  1658.     foreach $onelib (@liblist)
  1659.     {
  1660.         # Canonicalize names.
  1661.         ($xlib = $onelib) =~ tr/A-Za-z0-9_/_/c;
  1662.         if (&variable_defined ($xlib . '_LIBADD'))
  1663.         {
  1664.         &check_libobjs_sources ($xlib, $xlib . '_LIBADD');
  1665.         }
  1666.     }
  1667.     }
  1668.  
  1669.     &define_variable ('AR', 'ar');
  1670.     &define_configure_variable ('RANLIB');
  1671. }
  1672.  
  1673. # Handle shared libraries.
  1674. sub handle_ltlibraries
  1675. {
  1676.     local (@liblist) = &am_install_var ('-clean',
  1677.                     'ltlib', 'LTLIBRARIES',
  1678.                     'noinst', 'lib', 'pkglib');
  1679.     return if ! @liblist;
  1680.  
  1681.     local (%instdirs);
  1682.     local (%valid) = &am_primary_prefixes ('LTLIBRARIES', 'lib', 'pkglib',
  1683.                        'noinst');
  1684.  
  1685.     local ($key);
  1686.     foreach $key (keys %valid)
  1687.     {
  1688.     if (&variable_defined ($key . '_LTLIBRARIES'))
  1689.     {
  1690.         if (!$seen_libtool)
  1691.         {
  1692.         &am_line_error ($key . '_LTLIBRARIES', "library used but \`LIBTOOL' not defined in \`$configure_ac'");
  1693.         # Only get this error once.  If this is ever printed,
  1694.         # we have a bug.
  1695.         $configure_vars{'LIBTOOL'} = 'BUG';
  1696.         $seen_libtool = 1;
  1697.         }
  1698.  
  1699.         # Get the installation directory of each library.
  1700.         for (&variable_value_as_list ($key . '_LTLIBRARIES', 'all'))
  1701.         {
  1702.         if ($instdirs{$_})
  1703.         {
  1704.             &am_error ("\`$_' is already going to be installed in \`$instdirs{$_}'");
  1705.         }
  1706.         else
  1707.         {
  1708.             $instdirs{$_} = $key;
  1709.         }
  1710.         }
  1711.     }
  1712.     }
  1713.  
  1714.     local ($onelib);
  1715.     local ($munge);
  1716.     local ($xlib);
  1717.     local ($seen_libobjs) = 0;
  1718.     foreach $onelib (@liblist)
  1719.     {
  1720.     local ($obj) = &get_object_extension ($onelib);
  1721.  
  1722.     # Canonicalize names and check for misspellings.
  1723.     $xlib = &check_canonical_spelling ($onelib, '_LIBADD', '_LDFLAGS',
  1724.                        '_SOURCES', '_OBJECTS',
  1725.                        '_DEPENDENCIES');
  1726.  
  1727.     if (! &variable_defined ($xlib . '_LDFLAGS'))
  1728.     {
  1729.         # Define the lib_LDFLAGS variable.
  1730.         &define_variable ($xlib . '_LDFLAGS', '');
  1731.     }
  1732.  
  1733.     # Check that the library fits the standard naming convention.
  1734.         $libname_rx = "^lib.*\.la";
  1735.     if (&variable_value ($xlib . '_LDFLAGS') =~ /-module/)
  1736.     {
  1737.         # Relax name checking for libtool modules.
  1738.             $libname_rx = "\.la";
  1739.     }
  1740.     if ($onelib !~ /$libname_rx$/)
  1741.     {
  1742.         # FIXME this should only be a warning for foreign packages
  1743.         # FIXME should put line number here.  That means mapping
  1744.         # from library name back to variable name.
  1745.         &am_error ("\`$onelib' is not a standard libtool library name");
  1746.     }
  1747.  
  1748.     if (&variable_defined ($xlib . '_LIBADD'))
  1749.     {
  1750.         if (&handle_lib_objects ($xlib, $xlib . '_LIBADD', 0))
  1751.         {
  1752.         $seen_libobjs = 1;
  1753.         }
  1754.     }
  1755.     else
  1756.     {
  1757.         # Generate support for conditional object inclusion in
  1758.         # libraries.
  1759.         &define_variable ($xlib . "_LIBADD", '');
  1760.     }
  1761.  
  1762.     if (&variable_defined ($xlib . '_LDADD'))
  1763.     {
  1764.         &am_line_error ($xlib . '_LDADD',
  1765.                 "use \`" . $xlib . "_LIBADD', not \`"
  1766.                 . $xlib . "_LDADD'");
  1767.     }
  1768.  
  1769.     # Make sure we at look at this.
  1770.     &examine_variable ($xlib . '_DEPENDENCIES');
  1771.  
  1772.     local ($linker) = &handle_source_transform ($xlib, $onelib, $obj);
  1773.  
  1774.     # Determine program to use for link.
  1775.     local ($xlink);
  1776.     if (&variable_defined ($xlib . '_LINK'))
  1777.     {
  1778.         $xlink = $xlib . '_LINK';
  1779.     }
  1780.     else
  1781.     {
  1782.         $xlink = $linker ? $linker : 'LINK';
  1783.     }
  1784.  
  1785.     local ($rpath);
  1786.     if ($instdirs{$onelib} eq 'EXTRA' || $instdirs{$onelib} eq 'noinst')
  1787.     {
  1788.         # It's an EXTRA_ library, so we can't specify -rpath,
  1789.         # because we don't know where the library will end up.
  1790.         # The user probably knows, but generally speaking automake
  1791.         # doesn't -- and in fact configure could decide
  1792.         # dynamically between two different locations.
  1793.         $rpath = 's/\@RPATH\@//go;';
  1794.     }
  1795.     else
  1796.     {
  1797.         $rpath = ('s/\@RPATH\@/-rpath \$(' . $instdirs{$onelib}
  1798.               . 'dir)/go;');
  1799.     }
  1800.  
  1801.     $output_rules .=
  1802.         &file_contents_with_transform ('s/\@LTLIBRARY\@/'
  1803.                        . $onelib . '/go;'
  1804.                        . 's/\@XLTLIBRARY\@/'
  1805.                        . $xlib . '/go;'
  1806.                        . $rpath
  1807.                        . 's/\@XLINK\@/' . $xlink . '/go;',
  1808.                        'ltlibrary');
  1809.     }
  1810.  
  1811.     if ($seen_libobjs)
  1812.     {
  1813.     foreach $onelib (@liblist)
  1814.     {
  1815.         # Canonicalize names.
  1816.         ($xlib = $onelib) =~ tr/A-Za-z0-9_/_/c;
  1817.         if (&variable_defined ($xlib . '_LIBADD'))
  1818.         {
  1819.         &check_libobjs_sources ($xlib, $xlib . '_LIBADD');
  1820.         }
  1821.     }
  1822.     }
  1823. }
  1824.  
  1825. # See if any _SOURCES variable were misspelled.  Also, make sure that
  1826. # EXTRA_ variables don't contain configure substitutions.
  1827. sub check_typos
  1828. {
  1829.     local ($varname, $primary);
  1830.     foreach $varname (keys %contents)
  1831.     {
  1832.     foreach $primary ('_SOURCES', '_LIBADD', '_LDADD', '_LDFLAGS',
  1833.               '_DEPENDENCIES')
  1834.     {
  1835.         if ($varname =~ /$primary$/ && ! $content_seen{$varname})
  1836.         {
  1837.         &am_line_error ($varname,
  1838.                 "invalid unused variable name: \`$varname'");
  1839.         }
  1840.     }
  1841.     }
  1842. }
  1843.  
  1844. # Handle scripts.
  1845. sub handle_scripts
  1846. {
  1847.     # NOTE we no longer automatically clean SCRIPTS, because it is
  1848.     # useful to sometimes distribute scripts verbatim.  This happens
  1849.     # eg in Automake itself.
  1850.     &am_install_var ('scripts', 'SCRIPTS',
  1851.              'bin', 'sbin', 'libexec', 'pkgdata',
  1852.              'noinst', 'check');
  1853.  
  1854.     local ($scripts_installed) = 0;
  1855.     # Set $scripts_installed if appropriate.  Make sure we only find
  1856.     # scripts which are actually installed -- this is why we can't
  1857.     # simply use the return value of am_install_var.
  1858.     local (%valid) = &am_primary_prefixes ('SCRIPTS', 'bin', 'sbin',
  1859.                        'libexec', 'pkgdata',
  1860.                        'noinst', 'check');
  1861.     local ($key);
  1862.     foreach $key (keys %valid)
  1863.     {
  1864.     if ($key ne 'noinst'
  1865.         && $key ne 'check'
  1866.         && &variable_defined ($key . '_SCRIPTS'))
  1867.     {
  1868.         $scripts_installed = 1;
  1869.         # push (@check_tests, 'check-' . $key . 'SCRIPTS');
  1870.     }
  1871.     }
  1872.  
  1873.     if ($scripts_installed)
  1874.     {
  1875.     # If a program is installed, this is required.  We only want this
  1876.     # error to appear once.
  1877.     &am_conf_error ("AC_ARG_PROGRAM must be used in \`$configure_ac'")
  1878.         unless $seen_arg_prog;
  1879.     $seen_arg_prog = 1;
  1880.     }
  1881. }
  1882.  
  1883. # Search a file for a "version.texi" Texinfo include.  Return the name
  1884. # of the include file if found, or the empty string if not.  A
  1885. # "version.texi" file is actually any file whose name matches
  1886. # "vers*.texi".
  1887. sub scan_texinfo_file
  1888. {
  1889.     local ($filename) = @_;
  1890.  
  1891.     if (! open (TEXI, $filename))
  1892.     {
  1893.     &am_error ("couldn't open \`$filename': $!");
  1894.     return '';
  1895.     }
  1896.     print "automake: reading $filename\n" if $verbose;
  1897.  
  1898.     local ($vfile, $outfile);
  1899.     while (<TEXI>)
  1900.     {
  1901.     if (/^\@setfilename +(\S+)/)
  1902.     {
  1903.         $outfile = $1;
  1904.         last if ($vfile);
  1905.     }
  1906.  
  1907.     if (/^\@include\s+(vers[^.]*\.texi)\s*$/)
  1908.     {
  1909.         # Found version.texi include.
  1910.         $vfile = $1;
  1911.         last if $outfile;
  1912.     }
  1913.     }
  1914.  
  1915.     close (TEXI);
  1916.     return ($outfile, $vfile);
  1917. }
  1918.  
  1919. # Handle all Texinfo source.
  1920. sub handle_texinfo
  1921. {
  1922.     &am_line_error ('TEXINFOS',
  1923.             "\`TEXINFOS' is an anachronism; use \`info_TEXINFOS'")
  1924.     if &variable_defined ('TEXINFOS');
  1925.     return if (! &variable_defined ('info_TEXINFOS')
  1926.            && ! &variable_defined ('html_TEXINFOS'));
  1927.  
  1928.     if (&variable_defined ('html_TEXINFOS'))
  1929.     {
  1930.     &am_line_error ('html_TEXINFOS',
  1931.             "HTML generation not yet supported");
  1932.     return;
  1933.     }
  1934.  
  1935.     local (@texis) = &variable_value_as_list ('info_TEXINFOS', 'all');
  1936.  
  1937.     local (@info_deps_list, @dvis_list, @texi_deps);
  1938.     local ($infobase, $info_cursor);
  1939.     local (%versions);
  1940.     local ($done) = 0;
  1941.     local ($vti);
  1942.     local ($tc_cursor, @texi_cleans);
  1943.     local ($canonical);
  1944.  
  1945.     foreach $info_cursor (@texis)
  1946.     {
  1947.     # FIXME: This is mildly hacky, since it recognizes "txinfo".
  1948.     # I don't feel like making it right.
  1949.     ($infobase = $info_cursor) =~ s/\.te?xi(nfo)?$//;
  1950.  
  1951.     # If 'version.texi' is referenced by input file, then include
  1952.     # automatic versioning capability.
  1953.     local ($out_file, $vtexi) = &scan_texinfo_file ($relative_dir
  1954.                             . "/" . $info_cursor);
  1955.  
  1956.     if ($out_file eq '')
  1957.     {
  1958.         &am_error ("\`$info_cursor' missing \@setfilename");
  1959.         next;
  1960.     }
  1961.  
  1962.     if ($out_file =~ /\.(.+)$/ && $1 ne 'info')
  1963.     {
  1964.         # FIXME should report line number in input file.
  1965.         &am_error ("output of \`$info_cursor', \`$out_file', has unrecognized extension");
  1966.         next;
  1967.     }
  1968.  
  1969.     if ($vtexi)
  1970.     {
  1971.         &am_error ("\`$vtexi', included in \`$info_cursor', also included in \`$versions{$vtexi}'")
  1972.         if (defined $versions{$vtexi} && $vtexi ne "version.texi");
  1973.         $versions{$vtexi} = $info_cursor;
  1974.  
  1975.         # We number the stamp-vti files.  This is doable since the
  1976.         # actual names don't matter much.  We only number starting
  1977.         # with the second one, so that the common case looks nice.
  1978.         $vti = 'vti' . ($done ? ".$done" : '');
  1979.         &push_dist_common ($vtexi, 'stamp-' . $vti);
  1980.         push (@clean, $vti);
  1981.  
  1982.         # Only require once.
  1983.         &require_conf_file_with_line ('info_TEXINFOS', $FOREIGN,
  1984.                       'mdate-sh')
  1985.         if ! $done;
  1986.         ++$done;
  1987.  
  1988.         local ($conf_pat, $conf_dir);
  1989.         if ($config_aux_dir eq '.' || $config_aux_dir eq '')
  1990.         {
  1991.         $conf_dir = '$(srcdir)/';
  1992.         }
  1993.         else
  1994.         {
  1995.         $conf_dir = $config_aux_dir;
  1996.         $conf_dir .= '/' unless $conf_dir =~ /\/$/;
  1997.         }
  1998.         ($conf_pat = $conf_dir) =~ s/(\W)/\\$1/g;
  1999.         $output_rules .=
  2000.         &file_contents_with_transform
  2001.             ('s/\@TEXI\@/' . $info_cursor . '/g; '
  2002.              . 's/\@VTI\@/' . $vti . '/g; '
  2003.              . 's/\@VTEXI\@/' . $vtexi . '/g;'
  2004.              . 's,\@MDDIR\@,' . $conf_pat . ',g;'
  2005.              . 's,\@CONFIGURE_AC\@,' . $configure_ac . ',g;',
  2006.              'texi-vers');
  2007.  
  2008.         &push_phony_cleaners ($vti);
  2009.     }
  2010.  
  2011.     # If user specified file_TEXINFOS, then use that as explicit
  2012.     # dependency list.
  2013.     @texi_deps = ();
  2014.     push (@texi_deps, $info_cursor);
  2015.     push (@texi_deps, $vtexi) if $vtexi;
  2016.  
  2017.     # Canonicalize name first.
  2018.     ($canonical = $infobase) =~ tr/A-Za-z0-9_/_/c;
  2019.     if (&variable_defined ($canonical . "_TEXINFOS"))
  2020.     {
  2021.         push (@texi_deps, '$(' . $canonical . '_TEXINFOS)');
  2022.         &push_dist_common ('$(' . $canonical . '_TEXINFOS)');
  2023.     }
  2024.  
  2025.     $output_rules .= ("\n" . $out_file . ": "
  2026.               . join (' ', @texi_deps)
  2027.               . "\n" . $infobase . ".dvi: "
  2028.               . join (' ', @texi_deps)
  2029.               . "\n\n");
  2030.  
  2031.     push (@info_deps_list, $out_file);
  2032.     push (@dvis_list, $infobase . '.dvi');
  2033.  
  2034.     # Generate list of things to clean for this target.  We do
  2035.     # this explicitly because otherwise too many things could be
  2036.     # removed.  In particular the ".log" extension might
  2037.     # reasonably be used in other contexts by the user.
  2038.     foreach $tc_cursor ('aux', 'cp', 'cps', 'dvi', 'fn', 'fns',
  2039.                 'ky', 'kys', 'ps', 'log', 'pg', 'toc', 'tp', 'tps',
  2040.                 'vr', 'vrs', 'op', 'tr', 'cv', 'cn')
  2041.     {
  2042.         push (@texi_cleans, $infobase . '.' . $tc_cursor);
  2043.     }
  2044.     }
  2045.  
  2046.     # Find these programs wherever they may lie.  Yes, this has
  2047.     # intimate knowledge of the structure of the texinfo distribution.
  2048.     &define_program_variable ('MAKEINFO', 'build', 'texinfo/makeinfo',
  2049.                   'makeinfo',
  2050.                   # Circumlocution to avoid accidental
  2051.                   # configure substitution.
  2052.                   '@MAKE' . 'INFO@');
  2053.     &define_program_variable ('TEXI2DVI', 'src', 'texinfo/util',
  2054.                   'texi2dvi');
  2055.  
  2056.     # Set transform for including texinfos.am.  First, handle --cygnus
  2057.     # stuff.
  2058.     local ($xform);
  2059.     if ($cygnus_mode)
  2060.     {
  2061.     $xform = 's/^NOTCYGNUS.*$//; s/^CYGNUS//;';
  2062.     }
  2063.     else
  2064.     {
  2065.     $xform = 's/^CYGNUS.*$//; s/^NOTCYGNUS//;';
  2066.     }
  2067.  
  2068.     # Handle location of texinfo.tex.
  2069.     local ($need_texi_file) = 0;
  2070.     local ($texinfo_tex);
  2071.     if ($cygnus_mode)
  2072.     {
  2073.     $texinfo_tex = '$(top_srcdir)/../texinfo/texinfo.tex';
  2074.     &define_variable ('TEXINFO_TEX', $texinfo_tex);
  2075.  
  2076.     }
  2077.     elsif ($config_aux_dir ne '.' && $config_aux_dir ne '')
  2078.     {
  2079.     $texinfo_tex = $config_aux_dir . '/texinfo.tex';
  2080.     &define_variable ('TEXINFO_TEX', $texinfo_tex);
  2081.     }
  2082.     elsif (&variable_defined ('TEXINFO_TEX'))
  2083.     {
  2084.     # The user defined TEXINFO_TEX so assume he knows what he is
  2085.     # doing.
  2086.     $texinfo_tex = ('$(srcdir)/'
  2087.             . &dirname (&variable_value ('TEXINFO_TEX')));
  2088.     }
  2089.     else
  2090.     {
  2091.     $texinfo_tex = '.';
  2092.     $need_texi_file = 1;
  2093.     }
  2094.     local ($xxform);
  2095.     ($xxform = $texinfo_tex) =~ s/(\W)/\\$1/g;
  2096.     $xform .= ' s/\@TEXINFODIR\@/' . $xxform . '/g;';
  2097.  
  2098.     $output_rules .= &file_contents_with_transform ($xform, 'texinfos');
  2099.     push (@phony, 'install-info-am', 'uninstall-info');
  2100.     push (@dist_targets, 'dist-info');
  2101.  
  2102.     # How to clean.  The funny name is due to --cygnus influence; in
  2103.     # Cygnus mode, `clean-info' is a target that users can use.
  2104.     $output_rules .= "\nmostlyclean-aminfo:\n";
  2105.     &pretty_print_rule ("\t-rm -f", "\t  ", @texi_cleans);
  2106.     $output_rules .= ("\nclean-aminfo:\n\ndistclean-aminfo:\n\n"
  2107.               . "maintainer-clean-aminfo:\n\t"
  2108.               # Eww.  But how else can we find all the output
  2109.               # files from makeinfo?
  2110.               . ($cygnus_mode ? '' : 'cd $(srcdir) && ')
  2111.               . 'for i in $(INFO_DEPS); do' . " \\\n"
  2112.               . "\t" . '  rm -f $$i;' . " \\\n"
  2113.               . "\t" . '  if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then' . " \\\n"
  2114.               . "\t" . '    rm -f $$i-[0-9]*;' . " \\\n"
  2115.               . "\t" . '  fi;' . " \\\n"
  2116.               . "\tdone\n");
  2117.     &push_phony_cleaners ('aminfo');
  2118.     if ($cygnus_mode)
  2119.     {
  2120.     $output_rules .= "clean-info: mostlyclean-aminfo\n";
  2121.     }
  2122.  
  2123.     push (@suffixes, '.texi', '.texinfo', '.txi', '.info', '.dvi', '.ps');
  2124.  
  2125.     if (! defined $options{'no-installinfo'})
  2126.     {
  2127.     push (@uninstall, 'uninstall-info');
  2128.     push (@installdirs, '$(DESTDIR)$(infodir)');
  2129.     unshift (@install_data, 'install-info-am');
  2130.  
  2131.     # Make sure documentation is made and installed first.  Use
  2132.     # $(INFO_DEPS), not 'info', because otherwise recursive makes
  2133.     # get run twice during "make all".
  2134.     unshift (@all, '$(INFO_DEPS)');
  2135.     }
  2136.     push (@clean, 'aminfo');
  2137.     push (@info, '$(INFO_DEPS)');
  2138.     push (@dvi, '$(DVIS)');
  2139.  
  2140.     &define_variable ("INFO_DEPS", join (' ', @info_deps_list));
  2141.     &define_variable ("DVIS", join (' ', @dvis_list));
  2142.     # This next isn't strictly needed now -- the places that look here
  2143.     # could easily be changed to look in info_TEXINFOS.  But this is
  2144.     # probably better, in case noinst_TEXINFOS is ever supported.
  2145.     &define_variable ("TEXINFOS", &variable_value ('info_TEXINFOS'));
  2146.  
  2147.     # Do some error checking.  Note that this file is not required
  2148.     # when in Cygnus mode; instead we defined TEXINFO_TEX explicitly
  2149.     # up above.
  2150.     &require_file_with_line ('info_TEXINFOS', $FOREIGN, 'texinfo.tex')
  2151.     if $need_texi_file && ! defined $options{'no-texinfo.tex'};
  2152. }
  2153.  
  2154. # Handle any man pages.
  2155. sub handle_man_pages
  2156. {
  2157.     &am_line_error ('MANS', "\`MANS' is an anachronism; use \`man_MANS'")
  2158.     if &variable_defined ('MANS');
  2159.     return if ! &variable_defined ('man_MANS');
  2160.  
  2161.     # Find all the sections in use.  We do this by first looking for
  2162.     # "standard" sections, and then looking for any additional
  2163.     # sections used in man_MANS.
  2164.     local ($sect, %sections, %vlist);
  2165.     # Add more sections as needed.
  2166.     foreach $sect ('0'..'9', 'n', 'l')
  2167.     {
  2168.     if (&variable_defined ('man' . $sect . '_MANS'))
  2169.     {
  2170.         $sections{$sect} = 1;
  2171.         $vlist{'$(man' . $sect . '_MANS)'} = 1;
  2172.     }
  2173.     }
  2174.  
  2175.     if (&variable_defined ('man_MANS'))
  2176.     {
  2177.     $vlist{'$(man_MANS)'} = 1;
  2178.     foreach (&variable_value_as_list ('man_MANS', 'all'))
  2179.     {
  2180.         # A page like `foo.1c' goes into man1dir.
  2181.         if (/\.([0-9a-z])([a-z]*)$/)
  2182.         {
  2183.         $sections{$1} = 1;
  2184.         }
  2185.     }
  2186.     }
  2187.  
  2188.  
  2189.     # Now for each section, generate an install and unintall rule.
  2190.     # Sort sections so output is deterministic.
  2191.     local (@namelist);
  2192.     foreach $sect (sort keys %sections)
  2193.     {
  2194.     &define_variable ('man' . $sect . 'dir', '$(mandir)/man' . $sect);
  2195.     push (@installdirs, '$(DESTDIR)$(mandir)/man' . $sect)
  2196.         unless defined $options{'no-installman'};
  2197.     $output_rules .= &file_contents_with_transform ('s/\@SECTION\@/'
  2198.                             . $sect . '/g;',
  2199.                             'mans');
  2200.     push (@phony, 'install-man' . $sect, 'uninstall-man' . $sect);
  2201.     push (@namelist, 'install-man' . $sect);
  2202.     }
  2203.  
  2204.     # We don't really need this, but we use it in case we ever want to
  2205.     # support noinst_MANS.
  2206.     &define_variable ("MANS", join (' ', sort keys %vlist));
  2207.  
  2208.     # Generate list of install dirs.
  2209.     $output_rules .= ("install-man: \$(MANS)\n"
  2210.               . "\t\@\$(NORMAL_INSTALL)\n");
  2211.     &pretty_print_rule ("\t\$(MAKE) \$(AM_MAKEFLAGS)", "\t ", @namelist);
  2212.     push (@phony, 'install-man');
  2213.  
  2214.     $output_rules .= "uninstall-man:\n\t\@\$(NORMAL_UNINSTALL)\n";
  2215.     grep ($_ = 'un' . $_, @namelist);
  2216.     &pretty_print_rule ("\t\$(MAKE) \$(AM_MAKEFLAGS)", "\t ", @namelist);
  2217.     push (@phony, 'uninstall-man');
  2218.  
  2219.     $output_vars .= &file_contents ('mans-vars');
  2220.  
  2221.     if (! defined $options{'no-installman'})
  2222.     {
  2223.     push (@install_data, 'install-man');
  2224.     push (@uninstall, 'uninstall-man');
  2225.     push (@all, '$(MANS)');
  2226.     }
  2227. }
  2228.  
  2229. # Handle DATA variables.
  2230. sub handle_data
  2231. {
  2232.     &am_install_var ('-noextra', 'data', 'DATA', 'data', 'sysconf',
  2233.              'sharedstate', 'localstate', 'pkgdata',
  2234.              'noinst', 'check');
  2235. }
  2236.  
  2237. # Handle TAGS.
  2238. sub handle_tags
  2239. {
  2240.     push (@phony, 'tags');
  2241.     local (@tag_deps) = ();
  2242.     if (&variable_defined ('SUBDIRS'))
  2243.     {
  2244.     $output_rules .= ("tags-recursive:\n"
  2245.               . "\tlist=\'\$(SUBDIRS)\'; for subdir in \$\$list; do \\\n"
  2246.               # Never fail here if a subdir fails; it
  2247.               # isn't important.
  2248.               . "\t  test \"\$\$subdir\" = . || (cd \$\$subdir"
  2249.               . " && \$(MAKE) \$(AM_MAKEFLAGS) tags); \\\n"
  2250.               . "\tdone\n");
  2251.     push (@tag_deps, 'tags-recursive');
  2252.     push (@phony, 'tags-recursive');
  2253.     }
  2254.  
  2255.     if (&saw_sources_p (1)
  2256.     || &variable_defined ('ETAGS_ARGS')
  2257.     || @tag_deps)
  2258.     {
  2259.     local ($xform) = '';
  2260.     local ($one_hdr);
  2261.     foreach $one_hdr (@config_headers)
  2262.     {
  2263.         if ($relative_dir eq &dirname ($one_hdr))
  2264.         {
  2265.         # The config header is in this directory.  So require it.
  2266.         local ($var);
  2267.         ($var = &basename ($one_hdr)) =~ s/(\W)/\\$1/g;
  2268.         $xform .= ' ' if $xform;
  2269.         $xform .= $var;
  2270.         }
  2271.     }
  2272.     $xform = ('s/\@CONFIG\@/' . $xform . '/;'
  2273.           . 's/\@DIRS\@/' . join (' ', @tag_deps) . '/;');
  2274.  
  2275.     if (&variable_defined ('SUBDIRS'))
  2276.     {
  2277.         $xform .= 's/^SUBDIRS//;';
  2278.     }
  2279.     else
  2280.     {
  2281.         $xform .= 's/^SUBDIRS.*$//;';
  2282.     }
  2283.  
  2284.     $output_rules .= &file_contents_with_transform ($xform, 'tags');
  2285.     $output_rules .= &file_contents ('tags-clean');
  2286.     push (@clean, 'tags');
  2287.     &push_phony_cleaners ('tags');
  2288.     &examine_variable ('TAGS_DEPENDENCIES');
  2289.     }
  2290.     elsif (&variable_defined ('TAGS_DEPENDENCIES'))
  2291.     {
  2292.     &am_line_error ('TAGS_DEPENDENCIES',
  2293.             "doesn't make sense to define \`TAGS_DEPENDENCIES' without sources or \`ETAGS_ARGS'");
  2294.     }
  2295.     else
  2296.     {
  2297.     # Every Makefile must define some sort of TAGS rule.
  2298.     # Otherwise, it would be possible for a top-level "make TAGS"
  2299.     # to fail because some subdirectory failed.
  2300.     $output_rules .= "tags: TAGS\nTAGS:\n\n";
  2301.     }
  2302. }
  2303.  
  2304. # Handle multilib support.
  2305. sub handle_multilib
  2306. {
  2307.     return unless $seen_multilib;
  2308.  
  2309.     $output_rules .= &file_contents ('multilib.am');
  2310.     &push_phony_cleaners ('multi');
  2311.     push (@phony, 'all-multi', 'install-multi');
  2312. }
  2313.  
  2314. # Worker for handle_dist.
  2315. sub handle_dist_worker
  2316. {
  2317.     local ($makefile) = @_;
  2318.  
  2319.     $output_rules .= 'distdir: $(DISTFILES)' . "\n";
  2320.  
  2321.     # Initialization; only at top level.
  2322.     if ($relative_dir eq '.')
  2323.     {
  2324.     if (defined $options{'check-news'})
  2325.     {
  2326.         # For Gnits users, this is pretty handy.  Look at 15 lines
  2327.         # in case some explanatory text is desirable.
  2328.         $output_rules .= '    @if sed 15q $(srcdir)/NEWS | fgrep -e "$(VERSION)" > /dev/null; then :; else \\
  2329.       echo "NEWS not updated; not releasing" 1>&2; \\
  2330.       exit 1; \\
  2331.     fi
  2332. ';
  2333.     }
  2334.  
  2335.  
  2336.     # Create dist directory.
  2337.     $output_rules .= ("\t-rm -rf \$(distdir)\n"
  2338.               . "\tmkdir \$(distdir)\n"
  2339.               . "\t-chmod 777 \$(distdir)\n");
  2340.     }
  2341.  
  2342.     # Only run automake in `dist' target if --include-deps and
  2343.     # `no-dependencies' not specified.  That way the recipient of a
  2344.     # distribution can run "make dist" and not need Automake.  You
  2345.     # might be wondering why we run automake once for each directory
  2346.     # we distribute, instead of running it once at the top level.  The
  2347.     # answer is that we want to run automake after the dependencies
  2348.     # have been generated.  This occurs when "make" is run in the
  2349.     # subdir.  So automake must be run after make has updated the
  2350.     # Makefile, which means that it must run once per directory.
  2351.     if ($use_dependencies)
  2352.     {
  2353.     $output_rules .=
  2354.         (
  2355.          # There are several directories we need to know about
  2356.          # when rebuilding the Makefile.ins.  They are:
  2357.          #   here - The absolute path to our topmost build directory.
  2358.          #   top_distdir - The absolute path to the top of our dist
  2359.          #                 hierarchy.
  2360.          #   distdir - The path to our sub-part of the dist hierarchy.
  2361.          # If this directory is the topmost directory, we set
  2362.          # top_distdir from distdir; that lets us pass in distdir
  2363.          # from an enclosing package.
  2364.          "\t" . 'here=`cd $(top_builddir) && pwd`; ' . "\\\n"
  2365.          . "\t" . 'top_distdir=`cd $('
  2366.          . (($relative_dir eq '.') ? 'distdir' : 'top_distdir')
  2367.          . ') && pwd`; ' . "\\\n"
  2368.          . "\t" . 'distdir=`cd $(distdir) && pwd`; ' . "\\\n"
  2369.          . "\tcd \$(top_srcdir) \\\n"
  2370.          . "\t  && \$(AUTOMAKE) --include-deps --build-dir=\$\$here --srcdir-name=\$(top_srcdir) --output-dir=\$\$top_distdir "
  2371.          # Set strictness of output.
  2372.          . ($cygnus_mode ? '--cygnus' : ('--' . $strictness_name))
  2373.          . ($cmdline_use_dependencies ? '' : ' --include-deps')
  2374.          . " " . $makefile . "\n"
  2375.          );
  2376.     }
  2377.  
  2378.     # Scan EXTRA_DIST to see if we need to distribute anything from a
  2379.     # subdir.  If so, add it to the list.  I didn't want to do this
  2380.     # originally, but there were so many requests that I finally
  2381.     # relented.
  2382.     local (@dist_dirs);
  2383.     if (&variable_defined ('EXTRA_DIST'))
  2384.     {
  2385.     # FIXME: This should be fixed to work with conditionals.  That
  2386.     # will require only making the entries in @dist_dirs under the
  2387.     # appropriate condition.  This is meaningful if the nature of
  2388.     # the distribution should depend upon the configure options
  2389.     # used.
  2390.     foreach (&variable_value_as_list ('EXTRA_DIST', ''))
  2391.     {
  2392.         next if /^\@.*\@$/;
  2393.         next unless s,/+[^/]+$,,;
  2394.         push (@dist_dirs, $_)
  2395.         unless $_ eq '.';
  2396.     }
  2397.     }
  2398.     if (@dist_dirs)
  2399.     {
  2400.     # Prepend $(distdir) to each directory given.  Doing it via a
  2401.     # hash lets us ensure that each directory is used only once.
  2402.     local (%dhash);
  2403.     grep ($dhash{'$(distdir)/' . $_} = 1, @dist_dirs);
  2404.     $output_rules .= "\t";
  2405.     &pretty_print_rule ('$(mkinstalldirs)', "\t   ", sort keys %dhash);
  2406.     }
  2407.  
  2408.     # In loop, test for file existence because sometimes a file gets
  2409.     # included in DISTFILES twice.  For example this happens when a
  2410.     # single source file is used in building more than one program.
  2411.     # Also, there are situations in which "ln" can fail.  For instance
  2412.     # a file to distribute could actually be a cross-filesystem
  2413.     # symlink -- this can easily happen if "gettextize" was run on the
  2414.     # distribution.
  2415.     $output_rules .= "\t\@for file in \$(DISTFILES); do \\\n";
  2416.     if ($cygnus_mode)
  2417.     {
  2418.     $output_rules .= "\t  if test -f \$\$file; then d=.; else d=\$(srcdir); fi; \\\n";
  2419.     }
  2420.     else
  2421.     {
  2422.     $output_rules .= "\t  d=\$(srcdir); \\\n";
  2423.     }
  2424.     $output_rules .= ("\t  if test -d \$\$d/\$\$file; then \\\n"
  2425.               . "\t    cp -pr \$\$d/\$\$file \$(distdir)/\$\$file; \\\n"
  2426.               . "\t  else \\\n"
  2427.               . "\t    test -f \$(distdir)/\$\$file \\\n"
  2428.               . "\t    || ln \$\$d/\$\$file \$(distdir)/\$\$file 2> /dev/null \\\n"
  2429.               . "\t    || cp -p \$\$d/\$\$file \$(distdir)/\$\$file || :; \\\n"
  2430.               . "\t  fi; \\\n"
  2431.               . "\tdone\n");
  2432.  
  2433.     # If we have SUBDIRS, create all dist subdirectories and do
  2434.     # recursive build.
  2435.     if (&variable_defined ('SUBDIRS'))
  2436.     {
  2437.     # If SUBDIRS is conditionally defined, then set DIST_SUBDIRS
  2438.     # to all possible directories, and use it.  If DIST_SUBDIRS is
  2439.     # defined, just use it.
  2440.     local ($dist_subdir_name);
  2441.     if (&variable_conditions ('SUBDIRS')
  2442.         || &variable_defined ('DIST_SUBDIRS'))
  2443.     {
  2444.         $dist_subdir_name = 'DIST_SUBDIRS';
  2445.         if (! &variable_defined ('DIST_SUBDIRS'))
  2446.         {
  2447.         &define_pretty_variable ('DIST_SUBDIRS', '',
  2448.                      &variable_value_as_list ('SUBDIRS',
  2449.                                   'all'));
  2450.         }
  2451.     }
  2452.     else
  2453.     {
  2454.         $dist_subdir_name = 'SUBDIRS';
  2455.     }
  2456.  
  2457.     # Test for directory existence here because previous automake
  2458.     # invocation might have created some directories.  Note that
  2459.     # we explicitly set distdir for the subdir make; that lets us
  2460.     # mix-n-match many automake-using packages into one large
  2461.     # package, and have "dist" at the top level do the right
  2462.     # thing.  If we're in the topmost directory, then we use
  2463.     # `distdir' instead of `top_distdir'; this lets us work
  2464.     # correctly with an enclosing package.
  2465.     $output_rules .=
  2466.         ("\t" . 'for subdir in $(' . $dist_subdir_name . '); do ' . "\\\n"
  2467.          . "\t" . '  if test "$$subdir" = .; then :; else ' . "\\\n"
  2468.          . "\t" . '    test -d $(distdir)/$$subdir ' . "\\\n"
  2469.          . "\t" . '    || mkdir $(distdir)/$$subdir ' . "\\\n"
  2470.          . "\t" . '    || exit 1; ' . "\\\n"
  2471.          . "\t" . '    chmod 777 $(distdir)/$$subdir; ' . "\\\n"
  2472.          . "\t" . '    (cd $$subdir'
  2473.          . ' && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$('
  2474.          . (($relative_dir eq '.') ? 'distdir' : 'top_distdir')
  2475.          . ') distdir=../$(distdir)/$$subdir distdir) ' . "\\\n"
  2476.          . "\t" . '      || exit 1; ' . "\\\n"
  2477.          . "\t" . '  fi; ' . "\\\n"
  2478.          . "\tdone\n");
  2479.     }
  2480.  
  2481.     # If the target `dist-hook' exists, make sure it is run.  This
  2482.     # allows users to do random weird things to the distribution
  2483.     # before it is packaged up.
  2484.     push (@dist_targets, 'dist-hook') if &target_defined ('dist-hook');
  2485.  
  2486.     local ($targ);
  2487.     foreach $targ (@dist_targets)
  2488.     {
  2489.     # We must explicitly set distdir and top_distdir for these
  2490.     # sub-makes.
  2491.     $output_rules .= ("\t\$(MAKE) \$(AM_MAKEFLAGS)"
  2492.               . " top_distdir=\"\$(top_distdir)\""
  2493.               . " distdir=\"\$(distdir)\" $targ\n");
  2494.     }
  2495.  
  2496.     push (@phony, 'distdir');
  2497. }
  2498.  
  2499. # Handle 'dist' target.
  2500. sub handle_dist
  2501. {
  2502.     local ($makefile) = @_;
  2503.  
  2504.     # Set up maint_charset.
  2505.     $local_maint_charset = &variable_value ('MAINT_CHARSET')
  2506.     if &variable_defined ('MAINT_CHARSET');
  2507.     $maint_charset = $local_maint_charset
  2508.     if $relative_dir eq '.';
  2509.  
  2510.     if (&variable_defined ('DIST_CHARSET'))
  2511.     {
  2512.     &am_line_error ('DIST_CHARSET',
  2513.             "DIST_CHARSET defined but no MAINT_CHARSET defined")
  2514.         if ! $local_maint_charset;
  2515.     if ($relative_dir eq '.')
  2516.     {
  2517.         $dist_charset = &variable_value ('DIST_CHARSET')
  2518.     }
  2519.     else
  2520.     {
  2521.         &am_line_error ('DIST_CHARSET',
  2522.                 "DIST_CHARSET can only be defined at top level");
  2523.     }
  2524.     }
  2525.  
  2526.     # Look for common files that should be included in distribution.
  2527.     local ($cfile);
  2528.     foreach $cfile (@common_files)
  2529.     {
  2530.     if (-f ($relative_dir . "/" . $cfile))
  2531.     {
  2532.         &push_dist_common ($cfile);
  2533.     }
  2534.     }
  2535.  
  2536.     # Always require configure.ac and configure at top level, even if
  2537.     # they don't exist.  This is especially important for configure,
  2538.     # since it won't be created until autoconf is run -- which might
  2539.     # be after automake is run.
  2540.     &push_dist_common ($configure_ac, 'configure')
  2541.     if $relative_dir eq '.';
  2542.  
  2543.     # Keys of %dist_common are names of files to distributed.  We put
  2544.     # README first because it then becomes easier to make a
  2545.     # Usenet-compliant shar file (in these, README must be first).
  2546.     # FIXME: do more ordering of files here.
  2547.     local (@coms);
  2548.     if (defined $dist_common{'README'})
  2549.     {
  2550.     push (@coms, 'README');
  2551.     delete $dist_common{'README'};
  2552.     }
  2553.     push (@coms, sort keys %dist_common);
  2554.  
  2555.     &define_pretty_variable ("DIST_COMMON", '', @coms);
  2556.     $output_vars .= "\n";
  2557.  
  2558.     # Some boilerplate.
  2559.     $output_vars .= &file_contents ('dist-vars') . "\n";
  2560.     &define_variable ('TAR', $TAR);
  2561.     &define_variable ('GZIP_ENV', '--best');
  2562.  
  2563.     # Put these things in rules section so it is easier for whoever
  2564.     # reads Makefile.in.
  2565.     if (! &variable_defined ('distdir'))
  2566.     {
  2567.     if ($relative_dir eq '.')
  2568.     {
  2569.         $output_rules .= "\n" . 'distdir = $(PACKAGE)-$(VERSION)' . "\n";
  2570.     }
  2571.     else
  2572.     {
  2573.         $output_rules .= ("\n"
  2574.                   . 'distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)'
  2575.                   . "\n");
  2576.     }
  2577.     }
  2578.     if ($relative_dir eq '.')
  2579.     {
  2580.     $output_rules .= "top_distdir = \$(distdir)\n\n";
  2581.     }
  2582.     else
  2583.     {
  2584.     $output_rules .= "\nsubdir = " . $relative_dir . "\n\n";
  2585.     }
  2586.  
  2587.     # Generate 'dist' target, and maybe dist-shar / dist-zip / dist-tarZ.
  2588.     if ($relative_dir eq '.')
  2589.     {
  2590.     # Rule to check whether a distribution is viable.
  2591.     $output_rules .= ('# This target untars the dist file and tries a VPATH configuration.  Then
  2592. # it guarantees that the distribution is self-contained by making another
  2593. # tarfile.
  2594. distcheck: dist
  2595.     -rm -rf $(distdir)
  2596.     GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
  2597.     mkdir $(distdir)/=build
  2598.     mkdir $(distdir)/=inst
  2599.     dc_install_base=`cd $(distdir)/=inst && pwd`; \\'
  2600.               . (&target_defined ('distcheck-hook')
  2601.                  ? ("\n\t\$(MAKE) \$(AM_MAKEFLAGS)"
  2602.                 . " distcheck-hook; \\")
  2603.                  : '')
  2604.               . '
  2605.     cd $(distdir)/=build \\
  2606.       && ../configure '
  2607.  
  2608.               . ($seen_gettext ? '--with-included-gettext ' : '')
  2609.               . '--srcdir=.. --prefix=$$dc_install_base \\
  2610.       && $(MAKE) $(AM_MAKEFLAGS) \\
  2611.       && $(MAKE) $(AM_MAKEFLAGS) dvi \\
  2612.       && $(MAKE) $(AM_MAKEFLAGS) check \\
  2613.       && $(MAKE) $(AM_MAKEFLAGS) install \\
  2614.       && $(MAKE) $(AM_MAKEFLAGS) installcheck \\
  2615.       && $(MAKE) $(AM_MAKEFLAGS) dist
  2616.     -rm -rf $(distdir)
  2617.     @banner="$(distdir).tar.gz is ready for distribution"; \\
  2618.     dashes=`echo "$$banner" | sed s/./=/g`; \\
  2619.     echo "$$dashes"; \\
  2620.     echo "$$banner"; \\
  2621.     echo "$$dashes"
  2622. ');
  2623.  
  2624.     local ($dist_all) = ('dist-all: distdir' . "\n"
  2625.                  . $dist_header);
  2626.     local ($curs);
  2627.     foreach $curs ('dist', 'dist-shar', 'dist-zip', 'dist-tarZ')
  2628.     {
  2629.         if (defined $options{$curs} || $curs eq 'dist')
  2630.         {
  2631.         $output_rules .= ($curs . ': distdir' . "\n"
  2632.                   . $dist_header
  2633.                   . $dist{$curs}
  2634.                   . $dist_trailer);
  2635.         $dist_all .= $dist{$curs};
  2636.         }
  2637.     }
  2638.     $output_rules .= $dist_all . $dist_trailer;
  2639.     }
  2640.  
  2641.     # Generate distdir target.
  2642.     &handle_dist_worker ($makefile);
  2643. }
  2644.  
  2645. # Scan a single dependency file and rewrite the dependencies as
  2646. # appropriate.  Essentially this means:
  2647. # * Clean out absolute dependencies which are not desirable.
  2648. # * Rewrite other dependencies to be relative to $(top_srcdir).
  2649. sub scan_dependency_file
  2650. {
  2651.     local ($depfile) = @_;
  2652.  
  2653.     if (! open (DEP_FILE, $depfile))
  2654.     {
  2655.     &am_error ("couldn't open \`$depfile': $!");
  2656.     return;
  2657.     }
  2658.     print "automake: reading $depfile\n" if $verbose;
  2659.  
  2660.     # Sometimes it is necessary to omit some dependencies.
  2661.     local (%omit) = %omit_dependencies;
  2662.     if (&variable_defined ('OMIT_DEPENDENCIES'))
  2663.     {
  2664.     # FIXME: Doesn't work with conditionals.  I'm not sure if this
  2665.     # matters.
  2666.     grep ($omit{$_} = 1,
  2667.           &variable_value_as_list ('OMIT_DEPENDENCIES', ''));
  2668.     }
  2669.  
  2670.     local ($first_line) = 1;
  2671.     local ($last_line) = 0;
  2672.     local ($target, @dependencies);
  2673.     local ($one_dep, $xform);
  2674.     local ($just_file);
  2675.  
  2676.     local ($srcdir_rx, $fixup_rx);
  2677.     ($fixup_rx = $srcdir_name . '/' . $relative_dir . '/')
  2678.     =~ s/(\W)/\\$1/g;
  2679.     ($srcdir_rx = $srcdir_name . '/') =~ s/(\W)/\\$1/g;
  2680.  
  2681.     local ($rewrite_builddir) = (($top_builddir eq '.')
  2682.                  ? ''
  2683.                  : $top_builddir . '/');
  2684.  
  2685.     while (<DEP_FILE>)
  2686.     {
  2687.     last if $last_line;
  2688.     next if (/$WHITE_PATTERN/o);
  2689.     chop;
  2690.     if (! s/\\$//)
  2691.     {
  2692.         # No trailing "\" means this should be the last line of
  2693.         # the first target.  We can have multiple targets due to
  2694.         # the "deleted header file" fix.  For the generated
  2695.         # Makefile we simply skip these fake targets.
  2696.         $last_line = 1;
  2697.     }
  2698.  
  2699.     if ($first_line)
  2700.     {
  2701.         if (! /^([^:]+:)(.+)$/)
  2702.         {
  2703.           bad_format:
  2704.         &am_error ("\`$depfile' has incorrect format");
  2705.         close (DEP_FILE);
  2706.         return;
  2707.         }
  2708.  
  2709.         $_ = $2;
  2710.         # Make sure to strip the .P file from the target.
  2711.         ($target = $1) =~ s, *\.deps/[^.]+\.P,,;
  2712.  
  2713.         $first_line = 0;
  2714.     }
  2715.  
  2716.     foreach $one_dep (split (' ', $_))
  2717.     {
  2718.         ($just_file = $one_dep) =~ s,^.*/,,;
  2719.         next if defined $omit{$just_file};
  2720.  
  2721.         if ($one_dep =~ /^$fixup_rx/)
  2722.         {
  2723.         # The dependency points to the current directory in
  2724.         # some way.
  2725.         ($xform = $one_dep) =~ s/^$fixup_rx//;
  2726.         push (@dependencies, $xform);
  2727.         }
  2728.         elsif ($one_dep =~ /^$srcdir_rx/)
  2729.         {
  2730.         # The dependency is in some other directory in the package.
  2731.         ($xform = $one_dep) =~ s/^$srcdir_rx/$rewrite_builddir/;
  2732.         push (@dependencies, $xform);
  2733.         }
  2734.         elsif ($one_dep =~ /^\// || $one_dep =~ /^[A-Za-z]:\\/)
  2735.         {
  2736.         # Absolute path; ignore.
  2737.         }
  2738.         else
  2739.         {
  2740.         # Anything else is assumed to be correct.
  2741.         push (@dependencies, $one_dep);
  2742.         }
  2743.     }
  2744.     }
  2745.  
  2746.     &pretty_print_rule ($target, "\t", @dependencies);
  2747.  
  2748.     close (DEP_FILE);
  2749. }
  2750.  
  2751. # Handle auto-dependency code.
  2752. sub handle_dependencies
  2753. {
  2754.     # Make sure this variable is always marked as used.
  2755.     &examine_variable ('OMIT_DEPENDENCIES');
  2756.  
  2757.     if ($use_dependencies)
  2758.     {
  2759.     # Include GNU-make-specific auto-dep code.  Don't include it
  2760.     # if DEP_FILES would be empty.
  2761.     if (&saw_sources_p (0) && keys %dep_files)
  2762.     {
  2763.         &define_pretty_variable ('DEP_FILES', '', sort keys %dep_files);
  2764.         $output_rules .= &file_contents ('depend');
  2765.         push (@clean, 'depend');
  2766.         &push_phony_cleaners ('depend');
  2767.         # FIXME: this should use another property of the language
  2768.         # instead of being hard-coded.
  2769.         $output_rules .=
  2770.         &file_contents_with_transform ('s/\@EXT\@/.c/g;'
  2771.                            . 's/\@PFX\@//g;',
  2772.                            'depend2');
  2773.         local ($ext);
  2774.         foreach $ext (&objc_extensions)
  2775.         {
  2776.         $output_rules .=
  2777.             &file_contents_with_transform ('s/\@EXT\@/' . $ext . '/g;'
  2778.                            . 's/\@PFX\@/OBJC/g;',
  2779.                            'depend2');
  2780.         }
  2781.         foreach $ext (&cxx_extensions)
  2782.         {
  2783.         $output_rules .=
  2784.             &file_contents_with_transform ('s/\@EXT\@/' . $ext .'/g;'
  2785.                            . 's/\@PFX\@/CXX/g;',
  2786.                            'depend2');
  2787.         }
  2788.     }
  2789.     }
  2790.     elsif ($build_directory ne '')
  2791.     {
  2792.     # Include any auto-generated deps that are present.  Note that
  2793.     # $build_directory ends in a "/".
  2794.     if (-d ($build_directory . $relative_dir . "/.deps"))
  2795.     {
  2796.         local ($depfile);
  2797.  
  2798.         foreach $depfile (&my_glob ($build_directory
  2799.                     . $relative_dir . "/.deps/*.P"))
  2800.         {
  2801.         &scan_dependency_file ($depfile);
  2802.         }
  2803.  
  2804.         $output_rules .= "\n";
  2805.     }
  2806.     }
  2807. }
  2808.  
  2809. # Handle subdirectories.
  2810. sub handle_subdirs
  2811. {
  2812.     return if ! &variable_defined ('SUBDIRS');
  2813.  
  2814.     # Make sure each directory mentioned in SUBDIRS actually exists.
  2815.     local ($dir);
  2816.     foreach $dir (&variable_value_as_list ('SUBDIRS', 'all'))
  2817.     {
  2818.     # Skip directories substituted by configure.
  2819.     next if $dir =~ /^\@.*\@$/;
  2820.  
  2821.     if (! -d $am_relative_dir . '/' . $dir)
  2822.     {
  2823.         &am_line_error ('SUBDIRS',
  2824.                 "required directory $am_relative_dir/$dir does not exist");
  2825.         next;
  2826.     }
  2827.  
  2828.     &am_line_error ('SUBDIRS', "directory should not contain \`/'")
  2829.         if $dir =~ /\//;
  2830.     }
  2831.  
  2832.     local ($xform) = ('s/\@INSTALLINFO\@/' .
  2833.               (defined $options{'no-installinfo'}
  2834.                ? 'install-info-recursive'
  2835.                : '')
  2836.               . '/;');
  2837.     $output_rules .= &file_contents_with_transform ($xform, 'subdirs');
  2838.  
  2839.     # Push a bunch of phony targets.
  2840.     local ($phonies);
  2841.     foreach $phonies ('-data', '-exec', 'dirs')
  2842.     {
  2843.     push (@phony, 'install' . $phonies . '-recursive');
  2844.     push (@phony, 'uninstall' . $phonies . '-recursive');
  2845.     }
  2846.     foreach $phonies ('all', 'check', 'installcheck', 'info', 'dvi')
  2847.     {
  2848.     push (@phony, $phonies . '-recursive');
  2849.     }
  2850.     &push_phony_cleaners ('recursive');
  2851.  
  2852.     $recursive_install = 1;
  2853. }
  2854.  
  2855. # Handle aclocal.m4.
  2856. sub handle_aclocal_m4
  2857. {
  2858.     local ($regen_aclocal) = 0;
  2859.     if (-f 'aclocal.m4')
  2860.     {
  2861.     &define_variable ("ACLOCAL_M4", '$(top_srcdir)/aclocal.m4');
  2862.     &push_dist_common ('aclocal.m4');
  2863.  
  2864.     if (open (ACLOCAL, '< aclocal.m4'))
  2865.     {
  2866.         local ($line);
  2867.         $line = <ACLOCAL>;
  2868.         close (ACLOCAL);
  2869.  
  2870.         if ($line =~ 'generated automatically by aclocal')
  2871.         {
  2872.         $regen_aclocal = 1;
  2873.         }
  2874.     }
  2875.     }
  2876.  
  2877.     local ($acinclude) = 0;
  2878.     if (-f 'acinclude.m4')
  2879.     {
  2880.     $regen_aclocal = 1;
  2881.     $acinclude = 1;
  2882.     }
  2883.  
  2884.     # Note that it might be possible that aclocal.m4 doesn't exist but
  2885.     # should be auto-generated.  This case probably isn't very
  2886.     # important.
  2887.     if ($regen_aclocal)
  2888.     {
  2889.     local (@ac_deps) = (
  2890.                 ($seen_maint_mode
  2891.                  ? "\@MAINTAINER_MODE_TRUE\@"
  2892.                  : "") ,
  2893.                 $configure_ac,
  2894.                 ($acinclude ? ' acinclude.m4' : '')
  2895.                 );
  2896.  
  2897.     # Scan all -I directories for m4 files.  These are our
  2898.     # dependencies.
  2899.     if (&variable_defined ('ACLOCAL_AMFLAGS'))
  2900.     {
  2901.         local ($examine_next, $amdir) = 0;
  2902.         foreach $amdir (&variable_value_as_list ('ACLOCAL_AMFLAGS', ''))
  2903.         {
  2904.         if ($examine_next)
  2905.         {
  2906.             $examine_next = 0;
  2907.             if ($amdir !~ /^\// && -d $amdir)
  2908.             {
  2909.             push (@ac_deps, &my_glob ($amdir . '/*.m4'));
  2910.             }
  2911.         }
  2912.         elsif ($amdir eq '-I')
  2913.         {
  2914.             $examine_next = 1;
  2915.         }
  2916.         }
  2917.     }
  2918.  
  2919.     &pretty_print_rule ("\$(ACLOCAL_M4):", "\t\t", @ac_deps);
  2920.  
  2921.     $output_rules .=  ("\t"
  2922.                . 'cd $(srcdir) && $(ACLOCAL)'
  2923.                . (&variable_defined ('ACLOCAL_AMFLAGS')
  2924.                   ? ' $(ACLOCAL_AMFLAGS)' : '')
  2925.                . "\n");
  2926.     }
  2927. }
  2928.  
  2929. # Rewrite a list of input files into a form suitable to put on a
  2930. # dependency list.  The idea is that if an input file has a directory
  2931. # part the same as the current directory, then the directory part is
  2932. # simply removed.  But if the directory part is different, then
  2933. # $(top_srcdir) is prepended.  Among other things, this is used to
  2934. # generate the dependency list for the output files generated by
  2935. # AC_OUTPUT.  Consider what the dependencies should look like in this
  2936. # case:
  2937. #   AC_OUTPUT(src/out:src/in1:lib/in2)
  2938. # The first argument, ADD_SRCDIR, is 1 if $(top_srcdir) should be added.
  2939. # If 0 then files that require this addition will simply be ignored.
  2940. sub rewrite_inputs_into_dependencies
  2941. {
  2942.     local ($add_srcdir, @inputs) = @_;
  2943.     local ($single, @newinputs);
  2944.  
  2945.     foreach $single (@inputs)
  2946.     {
  2947.     if (&dirname ($single) eq $relative_dir)
  2948.     {
  2949.         push (@newinputs, &basename ($single));
  2950.     }
  2951.     elsif ($add_srcdir)
  2952.     {
  2953.         push (@newinputs, '$(top_srcdir)/' . $single);
  2954.     }
  2955.     }
  2956.  
  2957.     return @newinputs;
  2958. }
  2959.  
  2960. # Handle remaking and configure stuff.
  2961. # We need the name of the input file, to do proper remaking rules.
  2962. sub handle_configure
  2963. {
  2964.     local ($local, $input, @secondary_inputs) = @_;
  2965.  
  2966.     # If SUBDIRS defined, require AC_PROG_MAKE_SET.
  2967.     &am_line_error ('SUBDIRS', "AC_PROG_MAKE_SET must be used in \`$configure_ac'")
  2968.     if &variable_defined ('SUBDIRS') && ! $seen_make_set;
  2969.  
  2970.     local ($top_reldir);
  2971.  
  2972.     local ($input_base) = &basename ($input);
  2973.     local ($local_base) = &basename ($local);
  2974.  
  2975.     local ($amfile) = $input_base . '.am';
  2976.     # We know we can always add '.in' because it really should be an
  2977.     # error if the .in was missing originally.
  2978.     local ($infile) = '$(srcdir)/' . $input_base . '.in';
  2979.     local ($colon_infile);
  2980.     if ($local ne $input || @secondary_inputs)
  2981.     {
  2982.     $colon_infile = ':' . $input . '.in';
  2983.     }
  2984.     $colon_infile .= ':' . join (':', @secondary_inputs)
  2985.     if @secondary_inputs;
  2986.  
  2987.     local (@rewritten) = &rewrite_inputs_into_dependencies (1,
  2988.                                 @secondary_inputs);
  2989.  
  2990.     # This rule remakes the Makefile.in.  Note use of
  2991.     # @MAINTAINER_MODE_TRUE@ forces us to abandon pretty-printing.
  2992.     # Sigh.
  2993.     $output_rules .= ($infile
  2994.               # NOTE perl 5.003 (with -w) gives a
  2995.               # uninitialized value error on the next line.
  2996.               # Don't know why.
  2997.               . ': '
  2998.               . ($seen_maint_mode ? "\@MAINTAINER_MODE_TRUE\@ " : '')
  2999.               . $amfile . ' '
  3000.               . '$(top_srcdir)/'
  3001.               . $configure_ac
  3002.               . ' $(ACLOCAL_M4)'
  3003.                       . ' ' . join (' ', @include_stack)
  3004.                       . "\n"
  3005.               . "\tcd \$(top_srcdir) && \$(AUTOMAKE) "
  3006.               . ($cygnus_mode ? '--cygnus' : ('--' . $strictness_name))
  3007.               . ($cmdline_use_dependencies ? '' : ' --include-deps')
  3008.               . ' ' . $input . $colon_infile . "\n\n");
  3009.  
  3010.     # This rule remakes the Makefile.
  3011.     $output_rules .= ($local_base
  3012.               # NOTE: bogus uninit value error on next line;
  3013.               # see comment above.
  3014.               . ': '
  3015.               . $infile . ' '
  3016.               . join (' ', @rewritten)
  3017.               . ' $(top_builddir)/config.status'
  3018.               # NOTE: Makefile only depends on BUILT_SOURCES
  3019.               # when dependencies are being computed.  This is
  3020.               # a workaround for an obscure bug with
  3021.               # AC_LINK_FILES.  Anyway, when dependencies are
  3022.               # turned off, this shouldn't matter.
  3023.               . ($use_dependencies ? ' $(BUILT_SOURCES)' : '')
  3024.               . "\n"
  3025.               . "\tcd \$(top_builddir) \\\n"
  3026.               . "\t  && CONFIG_FILES="
  3027.               . (($relative_dir eq '.') ? '$@' : '$(subdir)/$@')
  3028.               . $colon_infile
  3029.               . ' CONFIG_HEADERS= $(SHELL) ./config.status'
  3030.               . "\n\n");
  3031.  
  3032.     if ($relative_dir ne '.')
  3033.     {
  3034.     # In subdirectory.
  3035.     $top_reldir = '../';
  3036.     }
  3037.     else
  3038.     {
  3039.     &handle_aclocal_m4;
  3040.         $output_rules .= &file_contents_with_transform ('s,\@CONFIGURE_AC\@,'
  3041.                                                         . $configure_ac
  3042.                                                         . ',;',
  3043.                                                         'remake');
  3044.     &examine_variable ('CONFIG_STATUS_DEPENDENCIES');
  3045.     &examine_variable ('CONFIGURE_DEPENDENCIES');
  3046.     $top_reldir = '';
  3047.     }
  3048.  
  3049.     # Make it easy to see if there is a Makefile.am in a given
  3050.     # directory.
  3051.     local (%make_dirs, $iter);
  3052.     foreach $iter (@input_files)
  3053.     {
  3054.     $make_dirs{&dirname ($iter)} = 1;
  3055.     }
  3056.     # We also want to notice Makefile.in's.
  3057.     foreach $iter (@other_input_files)
  3058.     {
  3059.     if ($iter =~ /Makefile\.in$/)
  3060.     {
  3061.         $make_dirs{&dirname ($iter)} = 1;
  3062.     }
  3063.     }
  3064.  
  3065.     # If we have a configure header, require it.
  3066.     local ($one_hdr);
  3067.     local (@local_fullnames) = @config_fullnames;
  3068.     local (@local_names) = @config_names;
  3069.     local ($hdr_index) = 0;
  3070.     local ($distclean_config) = '';
  3071.     foreach $one_hdr (@config_headers)
  3072.     {
  3073.     local ($one_fullname) = shift (@local_fullnames);
  3074.     local ($one_name) = shift (@local_names);
  3075.     $hdr_index += 1;
  3076.     local ($header_dir) = &dirname ($one_name);
  3077.  
  3078.     # If the header is in the current directory we want to build
  3079.     # the header here.  Otherwise, if we're at the topmost
  3080.     # directory and the header's directory doesn't have a
  3081.     # Makefile, then we also want to build the header.
  3082.     if ($relative_dir eq $header_dir
  3083.         || ($relative_dir eq '.' && ! defined $make_dirs{$header_dir}))
  3084.     {
  3085.         local ($ch_sans_dir, $cn_sans_dir, $stamp_dir);
  3086.         if ($relative_dir eq $header_dir)
  3087.         {
  3088.         $cn_sans_dir = &basename ($one_name);
  3089.         $stamp_dir = '';
  3090.         }
  3091.         else
  3092.         {
  3093.         $cn_sans_dir = $one_name;
  3094.         if ($header_dir eq '.')
  3095.         {
  3096.             $stamp_dir = '';
  3097.         }
  3098.         else
  3099.         {
  3100.             $stamp_dir = $header_dir . '/';
  3101.         }
  3102.         }
  3103.  
  3104.         # Compute relative path from directory holding output
  3105.         # header to directory holding input header.  FIXME:
  3106.         # doesn't handle case where we have multiple inputs.
  3107.         if (&dirname ($one_hdr) eq $relative_dir)
  3108.         {
  3109.         $ch_sans_dir = &basename ($one_hdr);
  3110.         }
  3111.         else
  3112.         {
  3113.         local (@rel_out_path, $rel_path);
  3114.         # FIXME this chunk of code should be its own sub.
  3115.         # It is used elsewhere.
  3116.         foreach (split (/\//, $relative_dir))
  3117.         {
  3118.             next if $_ eq '' || $_ eq '.';
  3119.             if ($_ eq '..')
  3120.             {
  3121.             # FIXME: actually this is an error.
  3122.             pop @rel_out_path;
  3123.             }
  3124.             else
  3125.             {
  3126.             push (@rel_out_path, '..');
  3127.             }
  3128.         }
  3129.         if (@rel_out_path)
  3130.         {
  3131.             $ch_sans_dir = join ('/', @rel_out_path) . '/' . $one_hdr;
  3132.         }
  3133.         else
  3134.         {
  3135.             $ch_sans_dir = $one_hdr;
  3136.         }
  3137.         }
  3138.  
  3139.         &require_file_with_conf_line ($config_header_line,
  3140.                       $FOREIGN, $ch_sans_dir);
  3141.  
  3142.         # Header defined and in this directory.
  3143.         local (@files);
  3144.         if (-f $relative_dir . '/acconfig.h')
  3145.         {
  3146.         push (@files, 'acconfig.h');
  3147.         }
  3148.         if (-f $one_name . '.top')
  3149.         {
  3150.         push (@files, "${cn_sans_dir}.top");
  3151.         }
  3152.         if (-f $one_name . '.bot')
  3153.         {
  3154.         push (@files, "${cn_sans_dir}.bot");
  3155.         }
  3156.  
  3157.         &push_dist_common (@files);
  3158.  
  3159.         local ($stamp_name) = 'stamp-h';
  3160.         $stamp_name .= "${hdr_index}" if scalar (@config_headers) > 1;
  3161.  
  3162.         local ($xform) = '';
  3163.  
  3164.         $xform = 's,\@FILES\@,' . join (' ', @files) . ',;';
  3165.         $xform .= 's,\@CONFIG_HEADER\@,' . "${cn_sans_dir}" . ',;';
  3166.         $xform .= 's,\@CONFIG_HEADER_IN\@,' . "${ch_sans_dir}" . ',;';
  3167.         $xform .= 's,\@CONFIG_HEADER_FULL\@,' . "${one_fullname}" . ',;';
  3168.         $xform .= 's,\@STAMP\@,' . "${stamp_dir}${stamp_name}" . ',;';
  3169.         $xform .= 's,\@CONFIGURE_AC\@,' . "${configure_ac}" . ',;';
  3170.  
  3171.         $output_rules .= &file_contents_with_transform ($xform,
  3172.                                 'remake-hdr');
  3173.  
  3174.         local ($out_dir) = &dirname ($ch_sans_dir);
  3175.         &create ("${relative_dir}/${out_dir}/${stamp_name}.in");
  3176.         &require_file_with_conf_line ($config_header_line, $FOREIGN,
  3177.                       "${out_dir}/${stamp_name}.in");
  3178.  
  3179.         $distclean_config .= ' ' if $distclean_config;
  3180.         $distclean_config .= $cn_sans_dir;
  3181.     }
  3182.     }
  3183.  
  3184.     if ($distclean_config)
  3185.     {
  3186.     $output_rules .= &file_contents_with_transform ('s,\@FILES\@,'
  3187.                             . $distclean_config
  3188.                             . ',;',
  3189.                             'clean-hdr');
  3190.     push (@clean, 'hdr');
  3191.     &push_phony_cleaners ('hdr');
  3192.     }
  3193.  
  3194.     # Set location of mkinstalldirs.
  3195.     if ($config_aux_dir ne '.' && $config_aux_dir ne '')
  3196.     {
  3197.     &define_variable ('mkinstalldirs', ('$(SHELL) ' . $config_aux_dir
  3198.                         . '/mkinstalldirs'));
  3199.     }
  3200.     else
  3201.     {
  3202.     &define_variable ('mkinstalldirs',
  3203.               '$(SHELL) $(top_srcdir)/mkinstalldirs');
  3204.     }
  3205.  
  3206.     &am_line_error ('CONFIG_HEADER',
  3207.             "\`CONFIG_HEADER' is an anachronism; now determined from \`$configure_ac'")
  3208.     if &variable_defined ('CONFIG_HEADER');
  3209.  
  3210.     local ($one_name);
  3211.     local ($config_header) = '';
  3212.     foreach $one_name (@config_names)
  3213.     {
  3214.     # Generate CONFIG_HEADER define.
  3215.     local ($one_hdr);
  3216.     if ($relative_dir eq &dirname ($one_name))
  3217.     {
  3218.         $one_hdr = &basename ($one_name);
  3219.     }
  3220.     else
  3221.     {
  3222.         $one_hdr = "${top_builddir}/${one_name}";
  3223.     }
  3224.  
  3225.     $config_header .= ' ' if $config_header;
  3226.     $config_header .= $one_hdr;
  3227.     }
  3228.     if ($config_header)
  3229.     {
  3230.     &define_variable ("CONFIG_HEADER", $config_header);
  3231.     }
  3232.  
  3233.     # Now look for other files in this directory which must be remade
  3234.     # by config.status, and generate rules for them.
  3235.     local (@actual_other_files) = ();
  3236.     local ($lfile, $local);
  3237.     local (@inputs, @rewritten_inputs, $single);
  3238.     local ($need_rewritten);
  3239.     foreach $lfile (@other_input_files)
  3240.     {
  3241.     local ($file);
  3242.     if ($lfile =~ /^([^:]*):(.*)$/)
  3243.     {
  3244.         # This is the ":" syntax of AC_OUTPUT.
  3245.         $file = $1;
  3246.         $local = &basename ($file);
  3247.         @inputs = split (':', $2);
  3248.         @rewritten_inputs = &rewrite_inputs_into_dependencies (1, @inputs);
  3249.         $need_rewritten = 1;
  3250.     }
  3251.     else
  3252.     {
  3253.         # Normal usage.
  3254.         $file = $lfile;
  3255.         $local = &basename ($file);
  3256.         @inputs = ($local . '.in');
  3257.         @rewritten_inputs =
  3258.         &rewrite_inputs_into_dependencies (1, $file . '.in');
  3259.         $need_rewritten = 0;
  3260.     }
  3261.  
  3262.     # Skip files not in this directory.
  3263.     next unless &dirname ($file) eq $relative_dir;
  3264.  
  3265.     # Skip any file that is an automake input.
  3266.     next if -f $file . '.am';
  3267.  
  3268.     # Some users have been tempted to put `stamp-h' in the
  3269.     # AC_OUTPUT line.  This won't do the right thing, so we
  3270.     # explicitly fail here.
  3271.     if ($local eq 'stamp-h')
  3272.     {
  3273.         # FIXME: allow real filename.
  3274.         &am_conf_error ($configure_ac, $ac_output_line,
  3275.                 'stamp-h should not appear in AC_OUTPUT');
  3276.         next;
  3277.     }
  3278.  
  3279.     $output_rules .= ($local . ': '
  3280.               . '$(top_builddir)/config.status '
  3281.               . join (' ', @rewritten_inputs) . "\n"
  3282.               . "\t"
  3283.               . 'cd $(top_builddir) && CONFIG_FILES='
  3284.               . ($relative_dir eq '.' ? '' : '$(subdir)/')
  3285.                  . '$@' . ($need_rewritten
  3286.                     ? (':' . join (':', @inputs))
  3287.                     : '')
  3288.               . ' CONFIG_HEADERS= $(SHELL) ./config.status'
  3289.               . "\n");
  3290.     push_dist_common (@rewritten_inputs);
  3291.     push (@actual_other_files, $local);
  3292.  
  3293.     # Require all input files.
  3294.     &require_file_with_conf_line ($ac_output_line, $FOREIGN,
  3295.                       &rewrite_inputs_into_dependencies (0, @inputs));
  3296.     }
  3297.  
  3298.     # These files get removed by "make clean".
  3299.     &define_pretty_variable ('CONFIG_CLEAN_FILES', '', @actual_other_files);
  3300. }
  3301.  
  3302. # Handle C headers.
  3303. sub handle_headers
  3304. {
  3305.     local (@r);
  3306.     @r = &am_install_var ('header', 'HEADERS', 'include',
  3307.               'oldinclude', 'pkginclude',
  3308.               'noinst', 'check');
  3309.     foreach (@r)
  3310.     {
  3311.     next unless /\.(.*)$/;
  3312.     &saw_extension ($1);
  3313.     }
  3314. }
  3315.  
  3316. sub handle_gettext
  3317. {
  3318.     return if ! $seen_gettext || $relative_dir ne '.';
  3319.  
  3320.     if (! &variable_defined ('SUBDIRS'))
  3321.     {
  3322.     &am_conf_error
  3323.         ("AM_GNU_GETTEXT in \`$configure_ac' but SUBDIRS not defined");
  3324.     return;
  3325.     }
  3326.  
  3327.     &require_file_with_conf_line ($ac_gettext_line, $GNU, 'ABOUT-NLS');
  3328.  
  3329.     if (&variable_defined ('SUBDIRS'))
  3330.     {
  3331.     &am_line_error
  3332.         ('SUBDIRS',
  3333.          "AM_GNU_GETTEXT in \`$configure_ac' but \`po' not in SUBDIRS")
  3334.         if $contents{'SUBDIRS'} !~ /\bpo\b/;
  3335.     &am_line_error
  3336.         ('SUBDIRS',
  3337.          "AM_GNU_GETTEXT in \`$configure_ac' but \`intl' not in SUBDIRS")
  3338.         if $contents{'SUBDIRS'} !~ /\bintl\b/;
  3339.     }
  3340.  
  3341.     # Ensure that each language in ALL_LINGUAS has a .po file, and
  3342.     # each po file is mentioned in ALL_LINGUAS.
  3343.     if ($seen_linguas)
  3344.     {
  3345.     local (%linguas) = ();
  3346.     grep ($linguas{$_} = 1, split (' ', $all_linguas));
  3347.  
  3348.     foreach (<po/*.po>)
  3349.     {
  3350.         s/^po\///;
  3351.         s/\.po$//;
  3352.  
  3353.         &am_line_error ($all_linguas_line,
  3354.                 ("po/$_.po exists but \`$_' not in \`ALL_LINGUAS'"))
  3355.         if ! $linguas{$_};
  3356.     }
  3357.  
  3358.     foreach (keys %linguas)
  3359.     {
  3360.         &am_line_error ($all_linguas_line,
  3361.                 "$_ in \`ALL_LINGUAS' but po/$_.po does not exist")
  3362.         if ! -f "po/$_.po";
  3363.     }
  3364.     }
  3365.     else
  3366.     {
  3367.     &am_error ("AM_GNU_GETTEXT in \`$configure_ac' but \`ALL_LINGUAS' not defined");
  3368.     }
  3369. }
  3370.  
  3371. # Handle footer elements.
  3372. sub handle_footer
  3373. {
  3374.     if ($contents{'SOURCES'})
  3375.     {
  3376.     # NOTE don't use define_pretty_variable here, because
  3377.     # $contents{...} is already defined.
  3378.     $output_vars .= 'SOURCES = ' . $contents{'SOURCES'} . "\n";
  3379.     }
  3380.     if ($contents{'OBJECTS'})
  3381.     {
  3382.     # NOTE don't use define_pretty_variable here, because
  3383.     # $contents{...} is already defined.
  3384.     $output_vars .= 'OBJECTS = ' . $contents{'OBJECTS'} . "\n";
  3385.     }
  3386.     if ($contents{'SOURCES'} || $contents{'OBJECTS'})
  3387.     {
  3388.     $output_vars .= "\n";
  3389.     }
  3390.  
  3391.     if (&variable_defined ('SUFFIXES'))
  3392.     {
  3393.     # Push actual suffixes, and not $(SUFFIXES).  Some versions of
  3394.     # make do not like variable substitutions on the .SUFFIXES
  3395.     # line.
  3396.     push (@suffixes, &variable_value_as_list ('SUFFIXES', ''));
  3397.     }
  3398.     if (&target_defined ('.SUFFIXES'))
  3399.     {
  3400.     &am_line_error ('.SUFFIXES',
  3401.             "use variable \`SUFFIXES', not target \`.SUFFIXES'");
  3402.     }
  3403.  
  3404.     # Note: AIX 4.1 /bin/make will fail if any suffix rule appears
  3405.     # before .SUFFIXES.  So we make sure that .SUFFIXES appears before
  3406.     # anything else, by sticking it right after the default: target.
  3407.     $output_header .= ".SUFFIXES:\n";
  3408.     if (@suffixes)
  3409.     {
  3410.  
  3411.     # Make sure suffixes has unique elements.  Sort them to ensure
  3412.     # the output remains consistent.
  3413.     local (%suffixes);
  3414.  
  3415.     grep ($suffixes{$_} = 1, @suffixes);
  3416.  
  3417.     $output_header .= (".SUFFIXES: "
  3418.                . join (' ', sort keys %suffixes)
  3419.                . "\n");
  3420.     }
  3421.     $output_trailer .= &file_contents ('footer');
  3422. }
  3423.  
  3424. # Deal with installdirs target.
  3425. sub handle_installdirs
  3426. {
  3427.     # GNU Makefile standards recommend this.
  3428.     if ($recursive_install)
  3429.     {
  3430.     # We create a separate `-am' target so that the -recursive
  3431.     # rule will work correctly.
  3432.     $output_rules .= ("installdirs: installdirs-recursive\n"
  3433.               . "installdirs-am:\n");
  3434.     push (@phony, 'installdirs-am');
  3435.     }
  3436.     else
  3437.     {
  3438.     $output_rules .= "installdirs:\n";
  3439.     }
  3440.     push (@phony, 'installdirs');
  3441.     if (@installdirs)
  3442.     {
  3443.     &pretty_print_rule ("\t" . '$(mkinstalldirs) ', "\t\t",
  3444.                 @installdirs);
  3445.     }
  3446.     $output_rules .= "\n";
  3447. }
  3448.  
  3449. # There are several targets which need to be merged.  This is because
  3450. # their complete definition is compiled from many parts.  Note that we
  3451. # avoid double colon rules, otherwise we'd use them instead.
  3452. sub handle_merge_targets
  3453. {
  3454.     local ($makefile) = @_;
  3455.  
  3456.     # There are a few install-related variables that you should not define.
  3457.     local ($var);
  3458.     foreach $var ('PRE_INSTALL', 'POST_INSTALL', 'NORMAL_INSTALL')
  3459.     {
  3460.     if (&variable_defined ($var))
  3461.     {
  3462.         &am_line_error ($var, "\`$var' should not be defined");
  3463.     }
  3464.     }
  3465.  
  3466.     # Put this at the beginning for the sake of non-GNU makes.  This
  3467.     # is still wrong if these makes can run parallel jobs.  But it is
  3468.     # right enough.
  3469.     unshift (@all, &basename ($makefile));
  3470.  
  3471.     local ($one_name);
  3472.     foreach $one_name (@config_names)
  3473.     {
  3474.     push (@all, &basename ($one_name))
  3475.         if &dirname ($one_name) eq $relative_dir;
  3476.     }
  3477.  
  3478.     &do_one_merge_target ('info', @info);
  3479.     &do_one_merge_target ('dvi', @dvi);
  3480.     &do_check_merge_target;
  3481.     &do_one_merge_target ('installcheck', @installcheck);
  3482.  
  3483.     if (defined $options{'no-installinfo'})
  3484.     {
  3485.     &do_one_merge_target ('install-info', '');
  3486.     }
  3487.     elsif (&target_defined ('install-info-local'))
  3488.     {
  3489.     &am_line_error ('install-info-local',
  3490.             "\`install-info-local' target defined but \`no-installinfo' option not in use");
  3491.     }
  3492.  
  3493.     local ($utarg);
  3494.     foreach $utarg ('uninstall-data-local', 'uninstall-data-hook',
  3495.             'uninstall-exec-local', 'uninstall-exec-hook')
  3496.     {
  3497.     if (&target_defined ($utarg))
  3498.     {
  3499.         local ($x);
  3500.         ($x = $utarg) =~ s/(data|exec)-//;
  3501.         &am_line_error ($utarg, "use \`$x', not \`$utarg'");
  3502.     }
  3503.     }
  3504.  
  3505.     if (&target_defined ('install-local'))
  3506.     {
  3507.     &am_line_error ('install-local',
  3508.             "use \`install-data-local' or \`install-exec-local', not \`install-local'");
  3509.     }
  3510.  
  3511.     if (@all)
  3512.     {
  3513.     local ($one_name);
  3514.     local ($local_headers) = '';
  3515.     foreach $one_name (@config_names)
  3516.     {
  3517.         if (&dirname ($one_name) eq $relative_dir)
  3518.         {
  3519.         $local_headers .= ' ' if $local_headers;
  3520.         $local_headers .= &basename ($one_name);
  3521.         }
  3522.     }
  3523.     if ($local_headers)
  3524.     {
  3525.         # This is kind of a hack, but I couldn't see a better way
  3526.         # to handle it.  In this particular case, we need to make
  3527.         # sure config.h is built before we recurse.  We can't do
  3528.         # this by changing the order of dependencies to the "all"
  3529.         # because that breaks when using parallel makes.  Instead
  3530.         # we handle things explicitly.
  3531.         $output_rules .= ("all-recursive-am: ${local_headers}"
  3532.                   . "\n\t"
  3533.                   . '$(MAKE) $(AM_MAKEFLAGS)'
  3534.                   . " all-recursive"
  3535.                   . "\n\n");
  3536.         $all_target = 'all-recursive-am';
  3537.         push (@phony, 'all-recursive-am');
  3538.     }
  3539.     }
  3540.  
  3541.     # Print definitions users can use.
  3542.     &do_one_merge_target ('install-exec', @install_exec);
  3543.     $output_rules .= "\n";
  3544.  
  3545.     &do_one_merge_target ('install-data', @install_data);
  3546.     $output_rules .= "\n";
  3547.  
  3548.     &do_one_merge_target ('install', 'all-am');
  3549.     &do_one_merge_target ('uninstall', @uninstall);
  3550.  
  3551.     &do_one_merge_target ('all', @all);
  3552.  
  3553.     # Generate the new 'install-strip' target.  We can't just set
  3554.     # INSTALL_PROGRAM because that might be a relative path.
  3555.     $output_rules .= ("install-strip:\n\t"
  3556.               . '$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install'
  3557.               . "\n");
  3558. }
  3559.  
  3560. # Helper for handle_merge_targets.  Note that handle_merge_targets
  3561. # relies on the fact that this doesn't add an extra \n at the end.
  3562. sub do_one_merge_target
  3563. {
  3564.     local ($name, @values) = @_;
  3565.  
  3566.     if (&target_defined ($name . '-local'))
  3567.     {
  3568.     # User defined local form of target.  So include it.
  3569.     push (@values, $name . '-local');
  3570.     push (@phony, $name . '-local');
  3571.     }
  3572.  
  3573.     &pretty_print_rule ($name . "-am:", "\t\t", @values);
  3574.     if ($name eq 'install')
  3575.     {
  3576.     # Special-case `install-am' to run install-exec-am and
  3577.     # install-data-am after all-am is built.
  3578.     &pretty_print_rule ("\t\@\$(MAKE) \$(AM_MAKEFLAGS)", "\t  ",
  3579.                 'install-exec-am', 'install-data-am');
  3580.     }
  3581.     elsif ($name eq 'install-exec' && &target_defined ('install-exec-hook'))
  3582.     {
  3583.     $output_rules .= ("\t\@\$(NORMAL_INSTALL)\n"
  3584.               . "\t" . '$(MAKE) $(AM_MAKEFLAGS) install-exec-hook'
  3585.               . "\n");
  3586.     }
  3587.     elsif ($name eq 'install-data' && &target_defined ('install-data-hook'))
  3588.     {
  3589.     $output_rules .= ("\t\@\$(NORMAL_INSTALL)\n"
  3590.               . "\t" . '$(MAKE) $(AM_MAKEFLAGS) install-data-hook'
  3591.               . "\n");
  3592.     }
  3593.  
  3594.     local ($lname) = $name . ($recursive_install ? '-recursive' : '-am');
  3595.     local ($tname) = $name;
  3596.     # To understand this special case, see handle_merge_targets.
  3597.     if ($name eq 'all')
  3598.     {
  3599.     $tname = 'all-redirect';
  3600.     $lname = $all_target if $recursive_install;
  3601.     push (@phony, 'all-redirect');
  3602.     $output_all = "all: all-redirect\n";
  3603.     }
  3604.     &pretty_print_rule ($tname . ":", "\t\t", $lname);
  3605.     push (@phony, $name . '-am', $name);
  3606. }
  3607.  
  3608. # Handle check merge target specially.
  3609. sub do_check_merge_target
  3610. {
  3611.     if (&target_defined ('check-local'))
  3612.     {
  3613.     # User defined local form of target.  So include it.
  3614.     push (@check_tests, 'check-local');
  3615.     push (@phony, 'check-local');
  3616.     }
  3617.  
  3618.     # In --cygnus mode, check doesn't depend on all.
  3619.     if ($cygnus_mode)
  3620.     {
  3621.     # Just run the local check rules.
  3622.     &pretty_print_rule ('check-am:', "\t\t", @check);
  3623.     }
  3624.     else
  3625.     {
  3626.     # The check target must depend on the local equivalent of
  3627.     # `all', to ensure all the primary targets are built.  Then it
  3628.     # must build the local check rules.
  3629.     $output_rules .= "check-am: all-am\n";
  3630.     &pretty_print_rule ("\t\$(MAKE) \$(AM_MAKEFLAGS)", "\t  ",
  3631.                 @check)
  3632.         if @check;
  3633.     }
  3634.     &pretty_print_rule ("\t\$(MAKE) \$(AM_MAKEFLAGS)", "\t  ",
  3635.             @check_tests)
  3636.     if @check_tests;
  3637.  
  3638.     push (@phony, 'check', 'check-am');
  3639.     $output_rules .= ("check: "
  3640.               . ($recursive_install ? 'check-recursive' : 'check-am')
  3641.               . "\n");
  3642. }
  3643.  
  3644. # Handle all 'clean' targets.
  3645. sub handle_clean
  3646. {
  3647.     local ($xform) = '';
  3648.     local ($name);
  3649.  
  3650.     # Don't include `MAINTAINER'; it is handled specially below.
  3651.     foreach $name ('MOSTLY', '', 'DIST')
  3652.     {
  3653.     if (! &variable_defined ($name . 'CLEANFILES'))
  3654.     {
  3655.         $xform .= 's/^' . $name . 'CLEAN.*$//;';
  3656.     }
  3657.     else
  3658.     {
  3659.         $xform .= 's/^' . $name . 'CLEAN//;';
  3660.     }
  3661.     }
  3662.  
  3663.     # Built sources are automatically removed by maintainer-clean.
  3664.     push (@maintainer_clean_files, '\$(BUILT_SOURCES)')
  3665.     if &variable_defined ('BUILT_SOURCES');
  3666.     push (@maintainer_clean_files, '\$(MAINTAINERCLEANFILES)')
  3667.     if &variable_defined ('MAINTAINERCLEANFILES');
  3668.     if (! @maintainer_clean_files)
  3669.     {
  3670.     $xform .= 's/^MAINTAINERCLEAN.*$//;';
  3671.     }
  3672.     else
  3673.     {
  3674.     $xform .= ('s/^MAINTAINERCLEAN//;'
  3675.            # Join with no space to avoid spurious `test -z'
  3676.            # success at runtime.
  3677.            . 's,\@MCFILES\@,' . join ('', @maintainer_clean_files)
  3678.            . ',;'
  3679.            # A space is required in the join here.
  3680.            . 's,\@MFILES\@,' . join (' ', @maintainer_clean_files)
  3681.            . ',;');
  3682.     }
  3683.  
  3684.     $output_rules .= &file_contents_with_transform ($xform, 'clean');
  3685.  
  3686.     push (@clean, 'generic');
  3687.     &push_phony_cleaners ('generic');
  3688.  
  3689.     &do_one_clean_target ('clean', 'mostly', '', @clean);
  3690.     &do_one_clean_target ('clean', '', 'mostly', @clean);
  3691.     &do_one_clean_target ('clean', 'dist', '', @clean);
  3692.     &do_one_clean_target ('clean', 'maintainer-', 'dist', @clean);
  3693.  
  3694.     push (@phony, 'clean', 'mostlyclean', 'distclean', 'maintainer-clean');
  3695. }
  3696.  
  3697. # Helper for handle_clean.
  3698. sub do_one_clean_target
  3699. {
  3700.     local ($target, $name, $last_name, @deps) = @_;
  3701.  
  3702.     # Change each dependency `BLARG' into `clean-BLARG'.
  3703.     grep (($_ = $name . 'clean-' . $_) && 0, @deps);
  3704.  
  3705.     # Push the previous clean target.  There is no previous clean
  3706.     # target if we're doing mostlyclean.
  3707.     push (@deps, $last_name . $target . '-am')
  3708.     unless $name eq 'mostly';
  3709.  
  3710.     # If a -local version of the rule is given, add it to the list.
  3711.     if (&target_defined ($name . $target . '-local'))
  3712.     {
  3713.     push (@deps, $name . $target . '-local');
  3714.     }
  3715.  
  3716.     # Print the target and the dependencies.
  3717.     &pretty_print_rule ($name . $target . "-am: ", "\t\t", @deps);
  3718.  
  3719.     # FIXME: shouldn't we really print these messages before running
  3720.     # the dependencies?
  3721.     if ($name . $target eq 'maintainer-clean')
  3722.     {
  3723.     # Print a special warning.
  3724.     $output_rules .=
  3725.         ("\t\@echo \"This command is intended for maintainers to use;\"\n"
  3726.          . "\t\@echo \"it deletes files that may require special "
  3727.          . "tools to rebuild.\"\n");
  3728.     }
  3729.     elsif ($name . $target eq 'distclean')
  3730.     {
  3731.     $output_rules .= "\t-rm -f libtool\n" if $seen_libtool;
  3732.     }
  3733.     $output_rules .= "\n";
  3734.  
  3735.     # Now generate the actual clean target.
  3736.     $output_rules .= ($name . $target . ": " . $name . $target
  3737.               . ($recursive_install ? '-recursive' : '-am')
  3738.               . "\n");
  3739.  
  3740.     # We special-case config.status here.  If we do it as part of the
  3741.     # normal clean processing for this directory, then it might be
  3742.     # removed before some subdir is cleaned.  However, that subdir's
  3743.     # Makefile depends on config.status.
  3744.     if (($name . $target eq 'maintainer-clean'
  3745.      || $name . $target eq 'distclean')
  3746.     && $relative_dir eq '.')
  3747.     {
  3748.     $output_rules .= "\t-rm -f config.status\n";
  3749.     }
  3750.     $output_rules .= "\n";
  3751. }
  3752.  
  3753. # Handle .PHONY target.
  3754. sub handle_phony
  3755. {
  3756.     &pretty_print_rule ('.PHONY:', "", @phony);
  3757.     $output_rules .= "\n";
  3758. }
  3759.  
  3760. # Handle TESTS variable and other checks.
  3761. sub handle_tests
  3762. {
  3763.     if (defined $options{'dejagnu'})
  3764.     {
  3765.     push (@check_tests, 'check-DEJAGNU');
  3766.     push (@phony, 'check-DEJAGNU');
  3767.  
  3768.     local ($xform);
  3769.     if ($cygnus_mode)
  3770.     {
  3771.         $xform = 's/^CYGNUS//;';
  3772.     }
  3773.     else
  3774.     {
  3775.         $xform = 's/^CYGNUS.*$//;';
  3776.     }
  3777.     $output_rules .= &file_contents_with_transform ($xform, 'dejagnu');
  3778.  
  3779.     # In Cygnus mode, these are found in the build tree.
  3780.     # Otherwise they are looked for in $PATH.
  3781.     &define_program_variable ('EXPECT', 'build', 'expect', 'expect');
  3782.     &define_program_variable ('RUNTEST', 'src', 'dejagnu', 'runtest');
  3783.  
  3784.     # Only create site.exp rule if user hasn't already written
  3785.     # one.
  3786.     if (! &target_defined ('site.exp'))
  3787.     {
  3788.         # Note that in the rule we don't directly generate
  3789.         # site.exp to avoid the possibility of a corrupted
  3790.         # site.exp if make is interrupted.  Jim Meyering has some
  3791.         # useful text on this topic.
  3792.         $output_rules .= ("site.exp: Makefile\n"
  3793.                   . "\t\@echo 'Making a new site.exp file...'\n"
  3794.                   . "\t\@test ! -f site.bak || rm -f site.bak\n"
  3795.                   . "\t\@echo '## these variables are automatically generated by make ##' > \$\@-t\n"
  3796.                   . "\t\@echo '# Do not edit here.  If you wish to override these values' >> \$\@-t\n"
  3797.                   . "\t\@echo '# edit the last section' >> \$\@-t\n"
  3798.                   . "\t\@echo 'set tool \$(DEJATOOL)' >> \$\@-t\n"
  3799.                   . "\t\@echo 'set srcdir \$(srcdir)' >> \$\@-t\n"
  3800.                   . "\t\@echo 'set objdir' \`pwd\` >> \$\@-t\n");
  3801.  
  3802.         # Extra stuff for AC_CANONICAL_*
  3803.         local (@whatlist) = ();
  3804.         if ($seen_canonical)
  3805.         {
  3806.         push (@whatlist, 'host');
  3807.         }
  3808.  
  3809.         # Extra stuff only for AC_CANONICAL_SYSTEM.
  3810.         if ($seen_canonical == $AC_CANONICAL_SYSTEM)
  3811.         {
  3812.         push (@whatlist, 'target', 'build');
  3813.         }
  3814.  
  3815.         local ($c1, $c2);
  3816.         foreach $c1 (@whatlist)
  3817.         {
  3818.         foreach $c2 ('alias', 'triplet')
  3819.         {
  3820.             $output_rules .= "\t\@echo 'set ${c1}_${c2} \$(${c1}_${c2})' >> \$\@-t\n";
  3821.         }
  3822.         }
  3823.  
  3824.         $output_rules .= ("\t\@echo '## All variables above are generated by configure. Do Not Edit ##' >> \$\@-t\n"
  3825.                   . "\t\@test ! -f site.exp || sed '1,/^## All variables above are.*##/ d' site.exp >> \$\@-t\n"
  3826.                   . "\t\@test ! -f site.exp || mv site.exp site.bak\n"
  3827.                   . "\t\@mv \$\@-t site.exp\n");
  3828.     }
  3829.     }
  3830.     else
  3831.     {
  3832.     local ($c);
  3833.     foreach $c ('DEJATOOL', 'RUNTEST', 'RUNTESTFLAGS')
  3834.     {
  3835.         if (&variable_defined ($c))
  3836.         {
  3837.         &am_line_error ($c, "\`$c' defined but \`dejagnu' not in \`AUTOMAKE_OPTIONS'");
  3838.         }
  3839.     }
  3840.     }
  3841.  
  3842.     if (&variable_defined ('TESTS'))
  3843.     {
  3844.     push (@check_tests, 'check-TESTS');
  3845.     push (@phony, 'check-TESTS');
  3846.  
  3847.     $output_rules .= 'check-TESTS: $(TESTS)
  3848.     @failed=0; all=0; \\
  3849.     srcdir=$(srcdir); export srcdir; \\
  3850.     for tst in $(TESTS); do \\
  3851.       if test -f $$tst; then dir=.; \\
  3852.       else dir="$(srcdir)"; fi; \\
  3853.       if $(TESTS_ENVIRONMENT) $$dir/$$tst; then \\
  3854.         all=`expr $$all + 1`; \\
  3855.         echo "PASS: $$tst"; \\
  3856.       elif test $$? -ne 77; then \\
  3857.         all=`expr $$all + 1`; \\
  3858.         failed=`expr $$failed + 1`; \\
  3859.         echo "FAIL: $$tst"; \\
  3860.       fi; \\
  3861.     done; \\
  3862.     if test "$$failed" -eq 0; then \\
  3863.       banner="All $$all tests passed"; \\
  3864.     else \\
  3865.       banner="$$failed of $$all tests failed"; \\
  3866.     fi; \\
  3867.     dashes=`echo "$$banner" | sed s/./=/g`; \\
  3868.     echo "$$dashes"; \\
  3869.     echo "$$banner"; \\
  3870.     echo "$$dashes"; \\
  3871.     test "$$failed" -eq 0
  3872. ';
  3873.     }
  3874. }
  3875.  
  3876. # Handle Emacs Lisp.
  3877. sub handle_emacs_lisp
  3878. {
  3879.     local (@elfiles) = &am_install_var ('lisp', 'LISP', 'lisp', 'noinst');
  3880.  
  3881.     if (@elfiles)
  3882.     {
  3883.     # Found some lisp.
  3884.     &define_configure_variable ('lispdir');
  3885.     &define_configure_variable ('EMACS');
  3886.     $output_rules .= (".el.elc:\n"
  3887.               . "\t\@echo 'WARNING: Warnings can be ignored. :-)'\n"
  3888.               . "\tif test \$(EMACS) != no; then \\\n"
  3889.               . "\t  EMACS=\$(EMACS) \$(SHELL) \$(srcdir)/elisp-comp \$<; \\\n"
  3890.               . "\tfi\n");
  3891.     push (@suffixes, '.el', '.elc');
  3892.  
  3893.     # Generate .elc files.
  3894.     grep ($_ .= 'c', @elfiles);
  3895.     &define_pretty_variable ('ELCFILES', '', @elfiles);
  3896.  
  3897.     $output_rules .= &file_contents ('lisp-clean');
  3898.     push (@clean, 'lisp');
  3899.     &push_phony_cleaners ('lisp');
  3900.  
  3901.     push (@all, '$(ELCFILES)');
  3902.  
  3903.     local ($varname);
  3904.     if (&variable_defined ('lisp_LISP'))
  3905.     {
  3906.         $varname = 'lisp_LISP';
  3907.         &am_error ("\`lisp_LISP' defined but \`AM_PATH_LISPDIR' not in \`$configure_ac'")
  3908.         if ! $seen_lispdir;
  3909.     }
  3910.     else
  3911.     {
  3912.         $varname = 'noinst_LISP';
  3913.     }
  3914.  
  3915.     &require_file_with_line ($varname, $FOREIGN, 'elisp-comp');
  3916.     }
  3917. }
  3918.  
  3919. # Handle Java.
  3920. sub handle_java
  3921. {
  3922.     local (@sourcelist) = &am_install_var ('-clean', 'java', 'JAVA',
  3923.                        'java', 'noinst', 'check');
  3924.     return if ! @sourcelist;
  3925.  
  3926.     &define_variable ('JAVAC', 'javac');
  3927.     &define_variable ('JAVACFLAGS', '');
  3928.     &define_variable ('CLASSPATH_ENV',
  3929.               'CLASSPATH=$(JAVAROOT):$(srcdir)/$(JAVAROOT):$$CLASSPATH');
  3930.     &define_variable ('JAVAROOT', '$(top_builddir)');
  3931.  
  3932.     local (%valid) = &am_primary_prefixes ('JAVA', 'java', 'noinst', 'check');
  3933.  
  3934.     local ($dir, $curs);
  3935.     foreach $curs (keys %valid)
  3936.     {
  3937.     if (! &variable_defined ($curs . '_JAVA') || $curs eq 'noinst'
  3938.         || $curs eq 'EXTRA')
  3939.     {
  3940.         next;
  3941.     }
  3942.  
  3943.     if (defined $dir)
  3944.     {
  3945.         &am_line_error ($curs . '_JAVA',
  3946.                 "multiple _JAVA primaries in use");
  3947.     }
  3948.     $dir = $curs;
  3949.     }
  3950.  
  3951.     $output_rules .= ('class' . $dir . '.stamp: $(' . $dir . '_JAVA)' . "\n"
  3952.               . "\t" . '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) '
  3953.               . '$(JAVACFLAGS) $?' . "\n"
  3954.               . "\t" . 'echo timestamp > class' . $dir . '.stamp'
  3955.               . "\n");
  3956.     push (@all, 'class' . $dir . '.stamp');
  3957.     &push_dist_common ('$(' . $dir . '_JAVA)');
  3958. }
  3959.  
  3960. # Handle some of the minor options.
  3961. sub handle_minor_options
  3962. {
  3963.     if (defined $options{'readme-alpha'})
  3964.     {
  3965.     if ($relative_dir eq '.')
  3966.     {
  3967.         if ($package_version !~ /^$GNITS_VERSION_PATTERN$/)
  3968.         {
  3969.         # FIXME: allow real filename.
  3970.         &am_conf_line_error ($configure_ac,
  3971.                      $package_version_line,
  3972.                      "version \`$package_version' doesn't follow Gnits standards");
  3973.         }
  3974.         elsif (defined $1 && -f 'README-alpha')
  3975.         {
  3976.         # This means we have an alpha release.  See
  3977.         # GNITS_VERSION_PATTERN for details.
  3978.         &require_file ($FOREIGN, 'README-alpha');
  3979.         }
  3980.     }
  3981.     }
  3982. }
  3983.  
  3984. ################################################################
  3985.  
  3986. # Scan one file for interesting things.  Subroutine of scan_configure.
  3987. sub scan_one_configure_file
  3988. {
  3989.     local ($filename) = @_;
  3990.     local (*CONFIGURE);
  3991.  
  3992.     open (CONFIGURE, $filename)
  3993.     || die "automake: couldn't open \`$filename': $!\n";
  3994.     print "automake: reading $filename\n" if $verbose;
  3995.  
  3996.     while (<CONFIGURE>)
  3997.     {
  3998.     # Remove comments from current line.
  3999.     s/\bdnl\b.*$//;
  4000.     s/\#.*$//;
  4001.  
  4002.     # Skip macro definitions.  Otherwise we might be confused into
  4003.     # thinking that a macro that was only defined was actually
  4004.     # used.
  4005.     next if /AC_DEFUN/;
  4006.  
  4007.     # Follow includes.  This is a weirdness commonly in use at
  4008.     # Cygnus and hopefully nowhere else.
  4009.     if (/sinclude\((.*)\)/ && -f $1)
  4010.     {
  4011.         &scan_one_configure_file ($1);
  4012.     }
  4013.  
  4014.     # Populate libobjs array.
  4015.     if (/AC_FUNC_ALLOCA/)
  4016.     {
  4017.         $libsources{'alloca.c'} = 1;
  4018.     }
  4019.     elsif (/AC_FUNC_GETLOADAVG/)
  4020.     {
  4021.         $libsources{'getloadavg.c'} = 1;
  4022.     }
  4023.     elsif (/AC_FUNC_MEMCMP/)
  4024.     {
  4025.         $libsources{'memcmp.c'} = 1;
  4026.     }
  4027.     elsif (/AC_STRUCT_ST_BLOCKS/)
  4028.     {
  4029.         $libsources{'fileblocks.c'} = 1;
  4030.     }
  4031.     elsif (/A[CM]_REPLACE_GNU_GETOPT/)
  4032.     {
  4033.         $libsources{'getopt.c'} = 1;
  4034.         $libsources{'getopt1.c'} = 1;
  4035.     }
  4036.     elsif (/AM_FUNC_STRTOD/)
  4037.     {
  4038.         $libsources{'strtod.c'} = 1;
  4039.     }
  4040.     elsif (/AM_WITH_REGEX/)
  4041.     {
  4042.         $libsources{'rx.c'} = 1;
  4043.         $libsources{'rx.h'} = 1;
  4044.         $libsources{'regex.c'} = 1;
  4045.         $libsources{'regex.h'} = 1;
  4046.         $omit_dependencies{'rx.h'} = 1;
  4047.         $omit_dependencies{'regex.h'} = 1;
  4048.     }
  4049.     elsif (/AM_FUNC_MKTIME/)
  4050.     {
  4051.         $libsources{'mktime.c'} = 1;
  4052.     }
  4053.     elsif (/AM_FUNC_ERROR_AT_LINE/)
  4054.     {
  4055.         $libsources{'error.c'} = 1;
  4056.         $libsources{'error.h'} = 1;
  4057.     }
  4058.     elsif (/AM_FUNC_OBSTACK/)
  4059.     {
  4060.         $libsources{'obstack.c'} = 1;
  4061.         $libsources{'obstack.h'} = 1;
  4062.     }
  4063.     elsif (/LIBOBJS="(.*)\s+\$LIBOBJS"/
  4064.            || /LIBOBJS="\$LIBOBJS\s+(.*)"/)
  4065.     {
  4066.         foreach $libobj_iter (split (' ', $1))
  4067.         {
  4068.         if ($libobj_iter =~ /^(.*)\.o(bj)?$/)
  4069.         {
  4070.             $libsources{$1 . '.c'} = 1;
  4071.         }
  4072.         }
  4073.     }
  4074.  
  4075.     if (! $in_ac_replace && s/AC_REPLACE_FUNCS\s*\(\[?//)
  4076.     {
  4077.         $in_ac_replace = 1;
  4078.     }
  4079.     if ($in_ac_replace)
  4080.     {
  4081.         $in_ac_replace = 0 if s/[\]\)].*$//;
  4082.         # Remove trailing backslash.
  4083.         s/\\$//;
  4084.         foreach (split)
  4085.         {
  4086.         # Need to skip empty elements for Perl 4.
  4087.         next if $_ eq '';
  4088.         $libsources{$_ . '.c'} = 1;
  4089.         }
  4090.     }
  4091.  
  4092.     if (/$obsolete_rx/o)
  4093.     {
  4094.         local ($hint) = '';
  4095.         if ($obsolete_macros{$1})
  4096.         {
  4097.         $hint = '; ' . $obsolete_macros{$1};
  4098.         }
  4099.         &am_conf_line_error ($filename, $., "\`$1' is obsolete$hint");
  4100.     }
  4101.  
  4102.     # Process the AC_OUTPUT macro.
  4103.     if (! $in_ac_output && s/AC_OUTPUT\s*\(\[?//)
  4104.     {
  4105.         $in_ac_output = 1;
  4106.         $ac_output_line = $.;
  4107.     }
  4108.         if (! $in_ac_output && s/AC_CONFIG_FILES\s*\(\[?//)
  4109.         {
  4110.            $in_ac_output = 1;
  4111.            $ac_output_line = $.;
  4112.         }
  4113.     if ($in_ac_output)
  4114.     {
  4115.         local ($closing) = 0;
  4116.         if (s/[\]\),].*$//)
  4117.         {
  4118.         $in_ac_output = 0;
  4119.         $closing = 1;
  4120.         }
  4121.  
  4122.         # Look at potential Makefile.am's.
  4123.         foreach (split)
  4124.         {
  4125.         # Must skip empty string for Perl 4.
  4126.         next if $_ eq "\\" || $_ eq '';
  4127.  
  4128.         # Handle $local:$input syntax.  Note that we ignore
  4129.         # every input file past the first, though we keep
  4130.         # those around for later.
  4131.         local ($local, $input, @rest) = split (/:/);
  4132.         if (! $input)
  4133.         {
  4134.             $input = $local;
  4135.         }
  4136.         else
  4137.         {
  4138.             # FIXME: should be error if .in is missing.
  4139.             $input =~ s/\.in$//;
  4140.         }
  4141.  
  4142.         if (-f $input . '.am')
  4143.         {
  4144.             # We have a file that automake should generate.
  4145.             push (@make_input_list, $input);
  4146.             $make_list{$input} = join (':', ($local, @rest));
  4147.         }
  4148.         else
  4149.         {
  4150.             # We have a file that automake should cause to be
  4151.             # rebuilt, but shouldn't generate itself.
  4152.             push (@other_input_files, $_);
  4153.         }
  4154.         }
  4155.  
  4156.         if ($closing && @make_input_list == 0 && @other_input_files == 0)
  4157.         {
  4158.         &am_conf_line_error ($filename, $ac_output_line,
  4159.                      "No files mentioned in \`AC_OUTPUT'");
  4160.         exit 1;
  4161.         }
  4162.     }
  4163.  
  4164.     if (/$AC_CONFIG_AUX_DIR_PATTERN/o)
  4165.     {
  4166.         @config_aux_path = $1;
  4167.     }
  4168.  
  4169.     # Check for ansi2knr.
  4170.     $am_c_prototypes = 1 if /AM_C_PROTOTYPES/;
  4171.  
  4172.     # Check for exe extension stuff.
  4173.     if (/AC_EXEEXT/)
  4174.     {
  4175.         $seen_exeext = 1;
  4176.         $configure_vars{'EXEEXT'} = $filename . ':' . $.;
  4177.     }
  4178.  
  4179.     if (/AC_OBJEXT/)
  4180.     {
  4181.         $seen_objext = 1;
  4182.         $configure_vars{'OBJEXT'} = $filename . ':' . $.;
  4183.     }
  4184.  
  4185.     # Check for NLS support.
  4186.     if (/AM_GNU_GETTEXT/)
  4187.     {
  4188.         $seen_gettext = 1;
  4189.         $ac_gettext_line = $.;
  4190.         $omit_dependencies{'libintl.h'} = 1;
  4191.     }
  4192.  
  4193.         # Look for ALL_LINGUAS.
  4194.         if (/ALL_LINGUAS="(.*)"$/ || /ALL_LINGUAS=(.*)$/)
  4195.     {
  4196.         $seen_linguas = 1;
  4197.         $all_linguas = $1;
  4198.         $all_linguas_line = $.;
  4199.     }
  4200.  
  4201.     # Handle configuration headers.  A config header of `[$1]'
  4202.     # means we are actually scanning AM_CONFIG_HEADER from
  4203.     # aclocal.m4.
  4204.     if (/A([CM])_CONFIG_HEADERS?\s*\((.*)\)/
  4205.         && $2 ne '[$1]')
  4206.     {
  4207.         &am_conf_line_error
  4208.          ($filename, $., "\`automake requires \`AM_CONFIG_HEADER', not \`AC_CONFIG_HEADER'")
  4209.              if $1 eq 'C';
  4210.  
  4211.         $config_header_line = $.;
  4212.         local ($one_hdr);
  4213.         foreach $one_hdr (split (' ', $2))
  4214.         {
  4215.         push (@config_fullnames, $one_hdr);
  4216.         if ($one_hdr =~ /^([^:]+):(.+)$/)
  4217.         {
  4218.             push (@config_names, $1);
  4219.             push (@config_headers, $2);
  4220.         }
  4221.         else
  4222.         {
  4223.             push (@config_names, $one_hdr);
  4224.             push (@config_headers, $one_hdr . '.in');
  4225.         }
  4226.         }
  4227.     }
  4228.  
  4229.         # Handle AC_CANONICAL_*.  Always allow upgrading to
  4230.         # AC_CANONICAL_SYSTEM, but never downgrading.
  4231.     $seen_canonical = $AC_CANONICAL_HOST
  4232.         if ! $seen_canonical
  4233.         && (/AC_CANONICAL_HOST/ || /AC_CHECK_TOOL/);
  4234.         $seen_canonical = $AC_CANONICAL_SYSTEM if /AC_CANONICAL_SYSTEM/;
  4235.  
  4236.     $seen_path_xtra = 1 if /AC_PATH_XTRA/;
  4237.  
  4238.         # This macro handles several different things.
  4239.         if (/$AM_INIT_AUTOMAKE_PATTERN/o)
  4240.     {
  4241.         $seen_make_set = 1;
  4242.         $seen_package = 1;
  4243.         $seen_version = 1;
  4244.         $seen_arg_prog = 1;
  4245.         $seen_prog_install = 1;
  4246.         ($package_version = $1) =~ s/$AM_PACKAGE_VERSION_PATTERN/$1/o;
  4247.         $package_version_line = $.;
  4248.     }
  4249.  
  4250.     # This is like AM_INIT_AUTOMAKE, but doesn't actually set the
  4251.     # package and version number.  (This might change in the
  4252.     # future).  Yes, I'm not above hacking Automake so it works
  4253.     # well with other GNU tools -- that is actually the point.
  4254.     if (/AM_INIT_GUILE_MODULE/)
  4255.     {
  4256.         $seen_make_set = 1;
  4257.         $seen_package = 1;
  4258.         $seen_version = 1;
  4259.         $seen_arg_prog = 1;
  4260.         $seen_prog_install = 1;
  4261.         @config_aux_path = ('..');
  4262.     }
  4263.  
  4264.     # Some things required by Automake.
  4265.     $seen_make_set = 1 if /AC_PROG_MAKE_SET/;
  4266.     $seen_arg_prog = 1 if /AC_ARG_PROGRAM/;
  4267.  
  4268.     if (/AM_PROG_LEX/)
  4269.     {
  4270.         $configure_vars{'LEX'} = $filename . ':' . $.;
  4271.         $seen_decl_yytext = 1;
  4272.     }
  4273.     if (/AC_DECL_YYTEXT/ && $filename =~ /configure\.(ac|in)$/)
  4274.     {
  4275.         &am_conf_line_warning ($filename, $., "\`AC_DECL_YYTEXT' is covered by \`AM_PROG_LEX'");
  4276.     }
  4277.     if (/AC_PROG_LEX/ && $filename =~ /configure\.(ac|in)$/)
  4278.     {
  4279.          &am_conf_line_warning ($filename, $., "automake requires \`AM_PROG_LEX', not \`AC_PROG_LEX'");
  4280.     }
  4281.  
  4282.     if (/AC_PROG_(F77|YACC|RANLIB|CC|CXXCPP|CXX|LEX|AWK|CPP|LN_S)/)
  4283.     {
  4284.         $configure_vars{$1} = $filename . ':' . $.;
  4285.     }
  4286.     if (/$AC_CHECK_PATTERN/o)
  4287.     {
  4288.         $configure_vars{$3} = $filename . ':' . $.;
  4289.     }
  4290.     if (/$AM_MISSING_PATTERN/o
  4291.         && $1 ne 'ACLOCAL'
  4292.         && $1 ne 'AUTOCONF'
  4293.         && $1 ne 'AUTOMAKE'
  4294.         && $1 ne 'AUTOHEADER')
  4295.     {
  4296.         $configure_vars{$1} = $filename . ':' . $.;
  4297.     }
  4298.  
  4299.     # Explicitly avoid ANSI2KNR -- we AC_SUBST that in protos.m4,
  4300.     # but later define it elsewhere.  This is pretty hacky.  We
  4301.     # also explicitly avoid INSTALL_SCRIPT and some other
  4302.     # variables because they are defined in header-vars.am.
  4303.     # FIXME.
  4304.     if (/$AC_SUBST_PATTERN/o
  4305.         && $1 ne 'ANSI2KNR'
  4306.         && $1 ne 'INSTALL_SCRIPT'
  4307.         && $1 ne 'INSTALL_DATA')
  4308.     {
  4309.         $configure_vars{$1} = $filename . ':' . $.;
  4310.     }
  4311.  
  4312.         $seen_decl_yytext = 1 if /AC_DECL_YYTEXT/;
  4313.     if (/AM_MAINTAINER_MODE/)
  4314.     {
  4315.         $seen_maint_mode = 1;
  4316.         $configure_cond{'MAINTAINER_MODE'} = 1;
  4317.     }
  4318.         $seen_package = 1 if /PACKAGE=/;
  4319.  
  4320.     # Skip VERSION of [$2]; that is from AM_INIT_AUTOMAKE.
  4321.         if (/\bVERSION=(\S+)/ && $1 ne '$2' && $1 ne '[$2]')
  4322.     {
  4323.         $seen_version = 1;
  4324.         $package_version = $1;
  4325.         $package_version_line = $.;
  4326.     }
  4327.         elsif (/VERSION=/)
  4328.     {
  4329.         $seen_version = 1;
  4330.     }
  4331.  
  4332.     $seen_prog_install = 1 if /AC_PROG_INSTALL/;
  4333.         $seen_lispdir = 1 if /AM_PATH_LISPDIR/;
  4334.  
  4335.         if (/A(C|M)_PROG_LIBTOOL/)
  4336.     {
  4337.         # We're not ready for this yet.  People still use a
  4338.         # libtool with no AC_PROG_LIBTOOL.  Once that is the
  4339.         # dominant version we can reenable this code -- but next
  4340.         # time by mentioning the macro in %obsolete_macros, both
  4341.         # here and in aclocal.in.
  4342.  
  4343.         # if (/AM_PROG_LIBTOOL/)
  4344.         # {
  4345.         # &am_conf_line_warning ($filename, $., "`AM_PROG_LIBTOOL' is obsolete, use `AC_PROG_LIBTOOL' instead");
  4346.         # }
  4347.          $seen_libtool = 1;
  4348.         $libtool_line = $.;
  4349.         $configure_vars{'LIBTOOL'} = $filename . ':' . $.;
  4350.         $configure_vars{'RANLIB'} = $filename . ':' . $.;
  4351.         $configure_vars{'CC'} = $filename . ':' . $.;
  4352.         # AM_PROG_LIBTOOL runs AC_CANONICAL_HOST.  Make sure we
  4353.         # never downgrade (if we've seen AC_CANONICAL_SYSTEM).
  4354.         $seen_canonical = $AC_CANONICAL_HOST if ! $seen_canonical;
  4355.     }
  4356.  
  4357.     $seen_multilib = 1 if (/AM_ENABLE_MULTILIB/);
  4358.  
  4359.     if (/$AM_CONDITIONAL_PATTERN/o)
  4360.     {
  4361.         $configure_cond{$1} = 1;
  4362.     }
  4363.  
  4364.     # Check for Fortran 77 intrinsic and run-time libraries.
  4365.     if (/AC_F77_LIBRARY_LDFLAGS/)
  4366.     {
  4367.         $configure_vars{'FLIBS'} = $filename . ':' . $.;
  4368.     }
  4369.     }
  4370.  
  4371.     close (CONFIGURE);
  4372. }
  4373.  
  4374. # Scan configure.ac and aclocal.m4 for interesting things.  We must
  4375. # scan aclocal.m4 because there might be AC_SUBSTs and such there.
  4376. sub scan_configure
  4377. {
  4378.     # Reinitialize libsources here.  This isn't really necessary,
  4379.     # since we currently assume there is only one configure.ac.  But
  4380.     # that won't always be the case.
  4381.     %libsources = ();
  4382.  
  4383.     warn "automake: both `configure.ac' and `configure.in' present:"
  4384.          . " ignoring `configure.in'\n"
  4385.          if -f 'configure.ac' && -f 'configure.in';
  4386.     $configure_ac = 'configure.in'
  4387.          if -f 'configure.in';
  4388.     $configure_ac = 'configure.ac'
  4389.          if -f 'configure.ac';
  4390.     die "automake: `configure.ac' or `configure.in' is required\n"
  4391.          if !$configure_ac;
  4392.  
  4393.     local ($in_ac_output, $in_ac_replace) = (0, 0);
  4394.     local (%make_list, @make_input_list);
  4395.     local ($libobj_iter);
  4396.  
  4397.     &scan_one_configure_file ($configure_ac);
  4398.     &scan_one_configure_file ('aclocal.m4')
  4399.     if -f 'aclocal.m4';
  4400.  
  4401.     # Set input and output files if not specified by user.
  4402.     if (! @input_files)
  4403.     {
  4404.     @input_files = @make_input_list;
  4405.     %output_files = %make_list;
  4406.     }
  4407.  
  4408.     &am_conf_error ("\`PACKAGE' not defined in \`$configure_ac'")
  4409.         if ! $seen_package;
  4410.     &am_conf_error ("\`VERSION' not defined in \`$configure_ac'")
  4411.         if ! $seen_version;
  4412.  
  4413.     # Look for some files we need.  Always check for these.  This
  4414.     # check must be done for every run, even those where we are only
  4415.     # looking at a subdir Makefile.  We must set relative_dir so that
  4416.     # the file-finding machinery works.
  4417.     local ($relative_dir) = '.';
  4418.     &require_config_file ($FOREIGN, 'install-sh', 'mkinstalldirs', 'missing');
  4419.     &am_error ("\`install.sh' is an anachronism; use \`install-sh' instead")
  4420.         if -f $config_aux_path[0] . '/install.sh';
  4421. }
  4422.  
  4423. ################################################################
  4424.  
  4425. # Set up for Cygnus mode.
  4426. sub check_cygnus
  4427. {
  4428.     return unless $cygnus_mode;
  4429.  
  4430.     &set_strictness ('foreign');
  4431.     $options{'no-installinfo'} = 1;
  4432.     $options{'no-dependencies'} = 1;
  4433.     $use_dependencies = 0;
  4434.  
  4435.     if (! $seen_maint_mode)
  4436.     {
  4437.     &am_conf_error ("\`AM_MAINTAINER_MODE' required when --cygnus specified");
  4438.     }
  4439.  
  4440.     if (! $seen_exeext)
  4441.     {
  4442.     &am_conf_error ("\`AC_EXEEXT' required when --cygnus specified");
  4443.     }
  4444. }
  4445.  
  4446. # Do any extra checking for GNU standards.
  4447. sub check_gnu_standards
  4448. {
  4449.     if ($relative_dir eq '.')
  4450.     {
  4451.     # In top level (or only) directory.
  4452.     &require_file ($GNU, 'INSTALL', 'NEWS', 'README', 'COPYING',
  4453.                'AUTHORS', 'ChangeLog');
  4454.     }
  4455.  
  4456.     if ($strictness >= $GNU)
  4457.     {
  4458.     if (defined $options{'no-installman'})
  4459.     {
  4460.         &am_line_error ('AUTOMAKE_OPTIONS',
  4461.                 "option \`no-installman' disallowed by GNU standards");
  4462.     }
  4463.  
  4464.     if (defined $options{'no-installinfo'})
  4465.     {
  4466.         &am_line_error ('AUTOMAKE_OPTIONS',
  4467.                 "option \`no-installinfo' disallowed by GNU standards");
  4468.     }
  4469.     }
  4470. }
  4471.  
  4472. # Do any extra checking for GNITS standards.
  4473. sub check_gnits_standards
  4474. {
  4475.     if ($strictness >= $GNITS)
  4476.     {
  4477.     if (-f $relative_dir . '/COPYING.LIB')
  4478.     {
  4479.         &am_error ("\`${relative_dir}/COPYING.LIB' disallowed by Gnits standards");
  4480.     }
  4481.     }
  4482.  
  4483.     if ($relative_dir eq '.')
  4484.     {
  4485.     # In top level (or only) directory.
  4486.     &require_file ($GNITS, 'THANKS');
  4487.     }
  4488. }
  4489.  
  4490. ################################################################
  4491. #
  4492. # Functions to handle files of each language.
  4493.  
  4494. # Each `lang_X_rewrite' function follows a simple formula:
  4495. # * Args are the base name and extension of the file.
  4496. # * Return value is 1 if file is to be dealt with, 0 otherwise.
  4497. # Much of the actual processing is handled in handle_single_transform_list.
  4498. # These functions exist so that auxiliary information can be recorded
  4499. # for a later cleanup pass.  Note that the calls to these functions
  4500. # are computed, so don't bother searching for their precise names
  4501. # in the source.
  4502.  
  4503. # Rewrite a single C source file.
  4504. sub lang_c_rewrite
  4505. {
  4506.     local ($base, $ext) = @_;
  4507.  
  4508.     if (defined $options{'ansi2knr'} && $base =~ /_$/)
  4509.     {
  4510.     # FIXME: include line number in error.
  4511.     &am_error ("C source file \`$base.c' would be deleted by ansi2knr rules");
  4512.     }
  4513.  
  4514.     $de_ansi_files{$base} = 1;
  4515.     return 1;
  4516. }
  4517.  
  4518. # Rewrite a single C++ source file.
  4519. sub lang_cxx_rewrite
  4520. {
  4521.     return 1;
  4522. }
  4523.  
  4524. # Rewrite a single header file.
  4525. sub lang_header_rewrite
  4526. {
  4527.     # Header files are simply ignored.
  4528.     return 0;
  4529. }
  4530.  
  4531. # Rewrite a single yacc file.
  4532. sub lang_yacc_rewrite
  4533. {
  4534.     local ($base, $ext) = @_;
  4535.  
  4536.     &lang_c_rewrite ($base, $ext);
  4537.     $yacc_sources{$base . '.' . $ext} = 1;
  4538.     $ext =~ tr/y/c/;
  4539.     &saw_extension ('c');
  4540.     &push_dist_common ($base . '.' . $ext);
  4541.     return 1;
  4542. }
  4543.  
  4544. # Rewrite a single yacc++ file.
  4545. sub lang_yaccxx_rewrite
  4546. {
  4547.     local ($base, $ext) = @_;
  4548.  
  4549.     $yacc_sources{$base . '.' . $ext} = 1;
  4550.     $ext =~ tr/y/c/;
  4551.     &saw_extension ($ext);
  4552.     &push_dist_common ($base . '.' . $ext);
  4553.     return 1;
  4554. }
  4555.  
  4556. # Rewrite a single lex file.
  4557. sub lang_lex_rewrite
  4558. {
  4559.     local ($base, $ext) = @_;
  4560.  
  4561.     &lang_c_rewrite ($base, $ext);
  4562.     $lex_sources{$base . '.' . $ext} = 1;
  4563.     $ext =~ tr/l/c/;
  4564.     &saw_extension ('c');
  4565.     &push_dist_common ($base . '.' . $ext);
  4566.     return 1;
  4567. }
  4568.  
  4569. # Rewrite a single lex++ file.
  4570. sub lang_lexxx_rewrite
  4571. {
  4572.     local ($base, $ext) = @_;
  4573.  
  4574.     $lex_sources{$base . '.' . $ext} = 1;
  4575.     $ext =~ tr/l/c/;
  4576.     &saw_extension ($ext);
  4577.     &push_dist_common ($base . '.' . $ext);
  4578.     return 1;
  4579. }
  4580.  
  4581. # Rewrite a single assembly file.
  4582. sub lang_asm_rewrite
  4583. {
  4584.     return 1;
  4585. }
  4586.  
  4587. # Rewrite a single Fortran 77 file.
  4588. sub lang_f77_rewrite
  4589. {
  4590.     return 1;
  4591. }
  4592.  
  4593. # Rewrite a single Fortran 77 preprocessed file.
  4594. sub lang_ppf77_rewrite
  4595. {
  4596.     return 1;
  4597. }
  4598.  
  4599. # Rewrite a single Objective C file.
  4600. sub lang_objc_rewrite
  4601. {
  4602.     return 1;
  4603. }
  4604.  
  4605. # The lang_X_finish functions are called after all source file
  4606. # processing is done.  Each should handle defining rules for the
  4607. # language, etc.  A finish function is only called if a source file of
  4608. # the appropriate type has been seen.
  4609.  
  4610. sub lang_c_finish
  4611. {
  4612.     # Push all libobjs files onto de_ansi_files.  We actually only
  4613.     # push files which exist in the current directory, and which are
  4614.     # genuine source files.
  4615.     local ($file);
  4616.     foreach $file (keys %libsources)
  4617.     {
  4618.     if ($file =~ /^(.*)\.[cly]$/ && -f "$relative_dir/$file")
  4619.     {
  4620.         $de_ansi_files{$1} = 1;
  4621.     }
  4622.     }
  4623.  
  4624.     if (defined $options{'ansi2knr'} && keys %de_ansi_files)
  4625.     {
  4626.      # Make all _.c files depend on their corresponding .c files.
  4627.      local ($base, @objects);
  4628.      foreach $base (sort keys %de_ansi_files)
  4629.      {
  4630.         # Each _.c file must depend on ansi2knr; otherwise it
  4631.         # might be used in a parallel build before it is built.
  4632.         # We need to support files in the srcdir and in the build
  4633.         # dir (because these files might be auto-generated.  But
  4634.         # we can't use $< -- some makes only define $< during a
  4635.         # suffix rule.
  4636.          $output_rules .= ($base . "_.c: $base.c \$(ANSI2KNR)\n\t"
  4637.                   . '$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) '
  4638.                   . '`if test -f $(srcdir)/' . $base . '.c'
  4639.                   . '; then echo $(srcdir)/' . $base . '.c'
  4640.                   . '; else echo ' . $base . '.c; fi` '
  4641.                   . "| sed 's/^# \\([0-9]\\)/#line \\1/' "
  4642.                   . '| $(ANSI2KNR) > ' . $base . "_.c\n");
  4643.          push (@objects, $base . '_'
  4644.           . ($seen_objext ? '.$(OBJEXT)' : '.o'));
  4645.          push (@objects, $base . '_.lo') if $seen_libtool;
  4646.      }
  4647.  
  4648.      # Make all _.o (and _.lo) files depend on ansi2knr.
  4649.      # Use a sneaky little hack to make it print nicely.
  4650.      &pretty_print_rule ('', '', @objects, ':', '$(ANSI2KNR)');
  4651.     }
  4652.  
  4653.     if (! defined $configure_vars{'CC'})
  4654.     {
  4655.     # FIXME: line number.
  4656.     &am_error ("C source seen but \`CC' not defined in \`$configure_ac'");
  4657.     }
  4658. }
  4659.  
  4660. # A helper which computes a sorted list of all C++ extensions which
  4661. # were seen.
  4662. sub cxx_extensions
  4663. {
  4664.     local ($key, @r);
  4665.     foreach $key (sort keys %extension_seen)
  4666.     {
  4667.     push (@r, '.' . $key) if $extension_map{$key} eq 'cxx';
  4668.     }
  4669.     return @r;
  4670. }
  4671.  
  4672. sub lang_cxx_finish
  4673. {
  4674.     local (@cxx_list) = &cxx_extensions;
  4675.     local ($cxx_count) = scalar @cxx_list;
  4676.     if ($cxx_count)
  4677.     {
  4678.     push (@suffixes, @cxx_list);
  4679.  
  4680.     local ($ltcompile, $ltlink) = &libtool_compiler;
  4681.  
  4682.     &define_configure_variable ("CXXFLAGS");
  4683.     &define_variable ('CXXCOMPILE', '$(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)');
  4684.     &define_variable ('LTCXXCOMPILE',
  4685.               $ltcompile . '$(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)')
  4686.         if ($seen_libtool);
  4687.  
  4688.     &define_variable ('CXXLD', '$(CXX)');
  4689.     &define_variable ('CXXLINK', $ltlink . '$(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@');
  4690.  
  4691.     local ($ext);
  4692.     foreach $ext (@cxx_list)
  4693.     {
  4694.         $output_rules .= ("$ext.o:\n"
  4695.                   . "\t\$(CXXCOMPILE) -c \$<\n");
  4696.         # FIXME: Using cygpath should be somehow conditional.
  4697.         $output_rules .= ("$ext.obj:\n"
  4698.                   . "\t\$(CXXCOMPILE) -c `cygpath -w \$<`\n")
  4699.         if ($seen_objext);
  4700.         $output_rules .= ("$ext.lo:\n"
  4701.                   . "\t\$(LTCXXCOMPILE) -c \$<\n")
  4702.         if ($seen_libtool);
  4703.     }
  4704.  
  4705.     if (! defined $configure_vars{'CXX'})
  4706.     {
  4707.         &am_error ("C++ source seen but \`CXX' not defined in \`$configure_ac'");
  4708.     }
  4709.     }
  4710. }
  4711.  
  4712. sub lang_header_finish
  4713. {
  4714.     # Nothing to do.
  4715. }
  4716.  
  4717. # This is a helper for both lex and yacc.
  4718. sub yacc_lex_finish_helper
  4719. {
  4720.     return if defined $language_scratch{'lex-yacc-done'};
  4721.     $language_scratch{'lex-yacc-done'} = 1;
  4722.  
  4723.     # If there is more than one distinct yacc (resp lex) source file
  4724.     # in a given directory, then the `ylwrap' program is required to
  4725.     # allow parallel builds to work correctly.  FIXME: for now, no
  4726.     # line number.
  4727.     &require_config_file ($FOREIGN, 'ylwrap');
  4728.     if ($config_aux_dir ne '.' && $config_aux_dir ne '')
  4729.     {
  4730.     &define_variable ('YLWRAP', $config_aux_dir . "/ylwrap");
  4731.     }
  4732.     else
  4733.     {
  4734.     &define_variable ('YLWRAP', '$(srcdir)/ylwrap');
  4735.     }
  4736. }
  4737.  
  4738. sub lang_yacc_finish
  4739. {
  4740.     return if defined $language_scratch{'yacc-done'};
  4741.     $language_scratch{'yacc-done'} = 1;
  4742.  
  4743.     local ($file, $base, $hname, $cname);
  4744.     local (%seen_suffix) = ();
  4745.     local (@yacc_files) = sort keys %yacc_sources;
  4746.     local ($yacc_count) = scalar (@yacc_files);
  4747.     foreach $file (@yacc_files)
  4748.     {
  4749.     $file =~ /(\..*)$/;
  4750.     &output_yacc_build_rule ($1, $yacc_count > 1)
  4751.         if ! defined $seen_suffix{$1};
  4752.     $seen_suffix{$1} = 1;
  4753.  
  4754.     # Now generate rule to make the header file.  This should only
  4755.     # be generated if `yacc -d' specified.  But right now there is
  4756.     # no way to determine that.  FIXME: examine AM_YFLAGS?
  4757.     $file =~ /^(.*)\.(y|yy|y\+\+|yxx)$/;
  4758.     $base = $1;
  4759.     ($hname = $2) =~ tr/y/h/;
  4760.     ($cname = $2) =~ tr/y/c/;
  4761.     $output_rules .= "${base}.${hname}: ${base}.${cname}\n";
  4762.  
  4763.     # If the files are built in the build directory, then we want
  4764.     # to remove them with `make clean'.  If they are in srcdir
  4765.     # they shouldn't be touched.  However, we can't determine this
  4766.     # statically, and the GNU rules say that yacc/lex output files
  4767.     # should be removed by maintainer-clean.  So that's what we
  4768.     # do.
  4769.     push (@maintainer_clean_files, $base . $hname, $base . $cname);
  4770.     }
  4771.     $output_rules .= "\n";
  4772.  
  4773.     if (! defined $configure_vars{'YACC'})
  4774.     {
  4775.     &am_error ("yacc source seen but \`YACC' not defined in \`$configure_ac'");
  4776.     }
  4777.     if (&variable_defined ('YACCFLAGS'))
  4778.     {
  4779.     &am_line_error ('YACCFLAGS',
  4780.             "\`YACCFLAGS' obsolete; use \`YFLAGS' instead");
  4781.     }
  4782.  
  4783.     if ($yacc_count > 1)
  4784.     {
  4785.     &yacc_lex_finish_helper;
  4786.     }
  4787. }
  4788.  
  4789. sub lang_yaccxx_finish
  4790. {
  4791.     &lang_yacc_finish;
  4792. }
  4793.  
  4794. sub lang_lex_finish
  4795. {
  4796.     return if defined $language_scratch{'lex-done'};
  4797.     $language_scratch{'lex-done'} = 1;
  4798.  
  4799.     local (%seen_suffix) = ();
  4800.     local ($file, $cname);
  4801.     local ($lex_count) = scalar (keys %lex_sources);
  4802.     foreach $file (sort keys %lex_sources)
  4803.     {
  4804.     $file =~ /(\..*)$/;
  4805.     &output_lex_build_rule ($1, $lex_count > 1)
  4806.         if (! defined $seen_suffix{$1});
  4807.     $seen_suffix{$1} = 1;
  4808.  
  4809.     # If the files are built in the build directory, then we want
  4810.     # to remove them with `make clean'.  If they are in srcdir
  4811.     # they shouldn't be touched.  However, we can't determine this
  4812.     # statically, and the GNU rules say that yacc/lex output files
  4813.     # should be removed by maintainer-clean.  So that's what we
  4814.     # do.
  4815.     $file =~ /^(.*)\.(l|ll|l\+\+|lxx)$/;
  4816.     ($cname = $2) =~ tr/l/c/;
  4817.     push (@maintainer_clean_files, $1 . $cname);
  4818.     }
  4819.  
  4820.     if (! defined $configure_vars{'LEX'})
  4821.     {
  4822.     &am_error ("lex source seen but \`LEX' not defined in \`$configure_ac'");
  4823.     }
  4824.     if (! $seen_decl_yytext)
  4825.     {
  4826.     &am_error ("lex source seen but \`AC_DECL_YYTEXT' not in \`$configure_ac'");
  4827.     }
  4828.  
  4829.     if ($lex_count > 1)
  4830.     {
  4831.     &yacc_lex_finish_helper;
  4832.     }
  4833. }
  4834.  
  4835. sub lang_lexxx_finish
  4836. {
  4837.     &lang_lex_finish;
  4838. }
  4839.  
  4840. sub lang_asm_finish
  4841. {
  4842.     # Pretend we're C.
  4843.     &lang_c_finish;
  4844. }
  4845.  
  4846. # A helper which computes a sorted list of all Fortran 77 extensions
  4847. # which were seen.
  4848. sub f77_extensions
  4849. {
  4850.     local ($key, @r);
  4851.     foreach $key (sort keys %extension_seen)
  4852.     {
  4853.     push (@r, '.' . $key) if $extension_map{$key} eq 'f77';
  4854.     }
  4855.     return @r;
  4856. }
  4857.  
  4858. sub lang_f77_finish
  4859. {
  4860.     local (@f77_list) = &f77_extensions;
  4861.     local ($f77_count) = scalar @f77_list;
  4862.     if ($f77_count)
  4863.     {
  4864.     push (@suffixes, @f77_list);
  4865.  
  4866.     local ($ltcompile, $ltlink) = &libtool_compiler;
  4867.  
  4868.     &define_configure_variable ('FFLAGS');
  4869.     &define_variable ('F77COMPILE', '$(F77) $(AM_FFLAGS) $(FFLAGS)');
  4870.     &define_variable ('LTF77COMPILE',
  4871.               $ltcompile . '$(F77) $(AM_FFLAGS) $(FFLAGS)')
  4872.         if ($seen_libtool);
  4873.  
  4874.     &define_variable ('F77LD', '$(F77)');
  4875.     &define_variable ('F77LINK', $ltlink . '$(F77LD) $(AM_FFLAGS) $(FFLAGS) $(LDFLAGS) -o $@');
  4876.  
  4877.     local ($ext);
  4878.     foreach $ext (@f77_list)
  4879.     {
  4880.         $output_rules .= ("$ext.o:\n"
  4881.                   . "\t\$(F77COMPILE) -c \$<\n");
  4882.         # FIXME: Using cygpath should be somehow conditional.
  4883.         $output_rules .= ("$ext.obj:\n"
  4884.                   . "\t\$(F77COMPILE) -c `cygpath -w \$<`\n")
  4885.         if ($seen_objext);
  4886.         $output_rules .= ("$ext.lo:\n"
  4887.                   . "\t\$(LTF77COMPILE) -c \$<\n")
  4888.         if ($seen_libtool);
  4889.     }
  4890.  
  4891.     if (! defined $configure_vars{'F77'})
  4892.     {
  4893.         &am_error ("Fortran 77 source seen but \`F77' not defined in \`$configure_ac'");
  4894.     }
  4895.     }
  4896. }
  4897.  
  4898. # Preprocessed Fortran 77
  4899. #
  4900. # The current support for preprocessing Fortran 77 just involves passing
  4901. # `$(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS)' as additional flags
  4902. # to the Fortran 77 compiler, since this is how GNU Make does it; see
  4903. # the `GNU Make Manual, Edition 0.51 for `make' Version 3.76 Beta'
  4904. # (specifically, from info file `(make)Catalogue of Rules').
  4905. #
  4906. # A better approach would be to write an Autoconf test
  4907. # (i.e. AC_PROG_FPP) for a Fortran 77 preprocessor, because not all
  4908. # Fortran 77 compilers know how to do preprocessing.  The Autoconf macro
  4909. # AC_PROG_FPP should test the Fortran 77 compiler first for
  4910. # preprocessing capabilities, and then fall back on cpp (if cpp were
  4911. # available).
  4912. sub lang_ppf77_finish
  4913. {
  4914.     local ($ext) = 'F';
  4915.     last unless $extension_seen{$ext};
  4916.     push (@suffixes, '.' . $ext);
  4917.  
  4918.     local ($ltcompile, $ltlink) = &libtool_compiler;
  4919.  
  4920.     &define_configure_variable ('FFLAGS');
  4921.     &define_variable ('F77COMPILE', '$(F77) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)');
  4922.     &define_variable ('LTF77COMPILE',
  4923.               $ltcompile . '$(F77) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)')
  4924.     if ($seen_libtool);
  4925.  
  4926.     &define_variable ('F77LD', '$(F77)');
  4927.     &define_variable ('F77LINK', $ltlink . '$(F77LD) $(AM_FFLAGS) $(FFLAGS) $(LDFLAGS) -o $@');
  4928.  
  4929.     $output_rules .= (".$ext.o:\n"
  4930.               . "\t\$(F77COMPILE) -c \$<\n");
  4931.     # FIXME: Using cygpath should be somehow conditional.
  4932.     $output_rules .= (".$ext.obj:\n"
  4933.               . "\t\$(F77COMPILE) -c `cygpath -w \$<`\n")
  4934.     if ($seen_objext);
  4935.     $output_rules .= (".$ext.lo:\n"
  4936.               . "\t\$(LTF77COMPILE) -c \$<\n")
  4937.     if ($seen_libtool);
  4938.  
  4939.     # We also handle the case of preprocessing `.F' files into `.f'
  4940.     # files.
  4941.     $output_rules .= (".$ext.f:\n"
  4942.               . "\t\$(F77COMPILE) -F \$<\n");
  4943.  
  4944.     if (! defined $configure_vars{'F77'})
  4945.     {
  4946.     &am_error ("Fortran 77 source seen but \`F77' not defined in \`$configure_ac'");
  4947.     }
  4948. }
  4949.  
  4950. sub lang_ratfor_finish
  4951. {
  4952.     local ($ext) = 'r';
  4953.     last unless $extension_seen{$ext};
  4954.     push (@suffixes, '.' . $ext);
  4955.  
  4956.     local ($ltcompile, $ltlink) = &libtool_compiler;
  4957.  
  4958.     &define_configure_variable ('FFLAGS');
  4959.     &define_configure_variable ('RFLAGS');
  4960.     &define_variable ('RCOMPILE', '$(F77) $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)');
  4961.     &define_variable ('LTRCOMPILE',
  4962.               $ltcompile . '$(F77) $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)')
  4963.     if ($seen_libtool);
  4964.  
  4965.     &define_variable ('F77LD', '$(F77)');
  4966.     &define_variable ('F77LINK', $ltlink . '$(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS) $(LDFLAGS) -o $@');
  4967.  
  4968.     $output_rules .= ("$ext.o:\n"
  4969.               . "\t\$(RCOMPILE) -c \$<\n");
  4970.     # FIXME: Using cygpath should be somehow conditional.
  4971.     $output_rules .= ("$ext.obj:\n"
  4972.               . "\t\$(RCOMPILE) -c `cygpath -w \$<`\n")
  4973.     if ($seen_objext);
  4974.     $output_rules .= ("$ext.lo:\n"
  4975.               . "\t\$(LTRCOMPILE) -c \$<\n")
  4976.     if ($seen_libtool);
  4977.  
  4978.     # We also handle the case of preprocessing `.r' files into `.f'
  4979.     # files.
  4980.     $output_rules .= ("$ext.f:\n"
  4981.               . "\t\$(RCOMPILE) -F \$<\n");
  4982.  
  4983.     if (! defined $configure_vars{'F77'})
  4984.     {
  4985.     &am_error ("Ratfor source seen but \`F77' not defined in \`$configure_ac'");
  4986.     }
  4987. }
  4988.  
  4989. sub lang_objc_finish
  4990. {
  4991.     push (@suffixes, '.m');
  4992.  
  4993.     local ($ltcompile, $ltlink) = &libtool_compiler;
  4994.  
  4995.     &define_configure_variable ("OBJCFLAGS");
  4996.     &define_variable ('OBJCCOMPILE', '$(OBJC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS)');
  4997.     &define_variable ('LTOBJCCOMPILE',
  4998.                       $ltcompile . '$(OBJC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS)')
  4999.         if ($seen_libtool);
  5000.  
  5001.     &define_variable ('OBJCLD', '$(OBJC)');
  5002.     &define_variable ('OBJCLINK', $ltlink . '$(OBJCLD) $(AM_OBJCFLAGS) $(OBJCFLAGS) $(LDFLAGS) -o $@');
  5003.  
  5004.     $output_rules .= (".m.o:\n"
  5005.                       . "\t\$(OBJCCOMPILE) -c \$<\n");
  5006.     # FIXME: Using cygpath should be somehow conditional.
  5007.     $output_rules .= (".m.obj:\n"
  5008.                       . "\t\$(OBJCCOMPILE) -c `cygpath -w \$<`\n")
  5009.         if ($seen_objext);
  5010.     $output_rules .= (".m.lo:\n"
  5011.                       . "\t\$(LTOBJCCOMPILE) -c \$<\n")
  5012.         if ($seen_libtool);
  5013.  
  5014.     if (! defined $configure_vars{'OBJC'})
  5015.     {
  5016.     &am_error ("Objective C source seen but \`OBJC' not defined in \`$configure_ac'");
  5017.     }
  5018. }
  5019.  
  5020. # A helper which computes a sorted list of all ObjC extensions which
  5021. # were seen.
  5022. sub objc_extensions
  5023. {
  5024.     local ($key, @r);
  5025.     foreach $key (sort keys %extension_seen)
  5026.     {
  5027.     push (@r, '.' . $key) if $extension_map{$key} eq 'objc';
  5028.     }
  5029.     return @r;
  5030. }
  5031.  
  5032. # A helper which decides whether libtool is needed.  Returns prefix
  5033. # for compiler and linker.
  5034. sub libtool_compiler
  5035. {
  5036.     local ($ltcompile, $ltlink) = ('', '');
  5037.     if ($seen_libtool)
  5038.     {
  5039.     &define_configure_variable ("LIBTOOL");
  5040.     $ltcompile = '$(LIBTOOL) --mode=compile ';
  5041.     $ltlink = '$(LIBTOOL) --mode=link ';
  5042.     }
  5043.     return ($ltcompile, $ltlink);
  5044. }
  5045.  
  5046. # Given a hash table of linker names, pick the name that has the most
  5047. # precedence.  This is lame, but something has to have global
  5048. # knowledge in order to eliminate the conflict.  Add more linkers as
  5049. # required.
  5050. sub resolve_linker
  5051. {
  5052.     local (%linkers) = @_;
  5053.  
  5054.     return 'CXXLINK'
  5055.     if defined $linkers{'CXXLINK'};
  5056.     return 'F77LINK'
  5057.     if defined $linkers{'F77LINK'};
  5058.     return 'OBJCLINK'
  5059.         if defined $linkers{'OBJCLINK'};
  5060.     return 'LINK';
  5061. }
  5062.  
  5063. # Called to indicate that an extension was used.
  5064. sub saw_extension
  5065. {
  5066.     local ($ext) = @_;
  5067.     $extension_seen{$ext} = 1;
  5068. }
  5069.  
  5070. # Called to ask whether source files have been seen . If HEADERS is 1,
  5071. # headers can be included.
  5072. sub saw_sources_p
  5073. {
  5074.     local ($headers) = @_;
  5075.  
  5076.     if ($headers)
  5077.     {
  5078.     $headers = 0;
  5079.     }
  5080.     else
  5081.     {
  5082.     $headers = defined $extension_seen{'header'};
  5083.     }
  5084.  
  5085.     return scalar keys %extension_seen > $headers;
  5086. }
  5087.  
  5088. # Register a single language.  If LINKER is the empty string, it means
  5089. # to use the C linker.  DEANSI_P should only be 1 for languages where
  5090. # de-ansi-fication makes sense (i.e., C).  EXTENSIONS is a list of
  5091. # file extensions to match (no `.' included).
  5092. sub register_language
  5093. {
  5094.     local ($language, $linker, $deansi_p, @extensions) = @_;
  5095.  
  5096.     local ($iter);
  5097.     foreach $iter (@extensions)
  5098.     {
  5099.     if (defined $extension_map{$iter})
  5100.     {
  5101.         print STDERR
  5102.         "automake: programming error: duplicate extension $iter\n";
  5103.         exit 1;
  5104.     }
  5105.     $extension_map{$iter} = $language;
  5106.     }
  5107.  
  5108.     $language_map{$language . '-ansi-p'} = $deansi_p;
  5109.     $language_map{$language . '-linker'} = $linker;
  5110. }
  5111.  
  5112.  
  5113. ################################################################
  5114.  
  5115. # Pretty-print something.  HEAD is what should be printed at the
  5116. # beginning of the first line, FILL is what should be printed at the
  5117. # beginning of every subsequent line.
  5118. sub pretty_print_internal
  5119. {
  5120.     local ($head, $fill, @values) = @_;
  5121.  
  5122.     local ($column) = length ($head);
  5123.     local ($result) = $head;
  5124.  
  5125.     # Fill length is number of characters.  However, each Tab
  5126.     # character counts for eight.  So we count the number of Tabs and
  5127.     # multiply by 7.
  5128.     local ($fill_length) = length ($fill);
  5129.     $fill_length += 7 * ($fill =~ tr/\t/\t/d);
  5130.  
  5131.     local ($bol) = ($head eq '');
  5132.     foreach (@values)
  5133.     {
  5134.     # "71" because we also print a space.
  5135.     if ($column + length ($_) > 71)
  5136.     {
  5137.         $result .= " \\\n" . $fill;
  5138.         $column = $fill_length;
  5139.         $bol = 1;
  5140.     }
  5141.  
  5142.     $result .= ' ' unless ($bol);
  5143.     $result .= $_;
  5144.     $column += length ($_) + 1;
  5145.     $bol = 0;
  5146.     }
  5147.  
  5148.     $result .= "\n";
  5149.     return $result;
  5150. }
  5151.  
  5152. # Pretty-print something and append to output_vars.
  5153. sub pretty_print
  5154. {
  5155.     $output_vars .= &pretty_print_internal (@_);
  5156. }
  5157.  
  5158. # Pretty-print something and append to output_rules.
  5159. sub pretty_print_rule
  5160. {
  5161.     $output_rules .= &pretty_print_internal (@_);
  5162. }
  5163.  
  5164.  
  5165. ################################################################
  5166.  
  5167. # See if a target exists.
  5168. sub target_defined
  5169. {
  5170.     local ($target) = @_;
  5171.     return defined $targets{$target};
  5172. }
  5173.  
  5174. # See if two conditionals are the same.
  5175. sub conditional_same
  5176. {
  5177.     local ($cond1, $cond2) = @_;
  5178.  
  5179.     return (&conditional_true_when ($cond1, $cond2)
  5180.         && &conditional_true_when ($cond2, $cond1));
  5181. }
  5182.  
  5183. # See if a conditional is true.  Both arguments are conditional
  5184. # strings.  This returns true if the first conditional is true when
  5185. # the second conditional is true.
  5186. sub conditional_true_when
  5187. {
  5188.     local ($cond, $when) = @_;
  5189.  
  5190.     # Check the easy case first.
  5191.     if ($cond eq $when)
  5192.     {
  5193.     return 1;
  5194.     }
  5195.  
  5196.     # Check each component of $cond, which looks @COND1@@COND2@.
  5197.     foreach $comp (split ('@', $cond))
  5198.     {
  5199.     # The way we split will give null strings between each
  5200.     # condition.
  5201.     next if ! $comp;
  5202.  
  5203.     if (index ($when, '@' . $comp . '@') == -1)
  5204.     {
  5205.         return 0;
  5206.     }
  5207.     }
  5208.  
  5209.     return 1;
  5210. }
  5211.  
  5212. # Check for an ambiguous conditional.  This is called when a variable
  5213. # or target is being defined conditionally.  If we already know about
  5214. # a definition that is true under the same conditions, then we have an
  5215. # ambiguity.
  5216. sub check_ambiguous_conditional
  5217. {
  5218.     local ($var_name, $cond) = @_;
  5219.     local (@cond_vals) = split (' ', $conditional{$var_name});
  5220.     while (@cond_vals)
  5221.     {
  5222.     local ($vcond) = shift (@cond_vals);
  5223.     shift (@cond_vals);
  5224.     if (&conditional_true_when ($vcond, $cond)
  5225.         || &conditional_true_when ($cond, $vcond))
  5226.     {
  5227.         &am_line_error ($var_name,
  5228.                 "$var_name multiply defined in condition");
  5229.     }
  5230.     }
  5231. }
  5232.  
  5233. # See if a variable exists.  The first argument is the variable name,
  5234. # and the optional second argument is the condition which we should
  5235. # check.  If no condition is given, we currently return true if the
  5236. # variable is defined under any condition.
  5237. sub variable_defined
  5238. {
  5239.     local ($var, $cond) = @_;
  5240.     if (defined $targets{$var})
  5241.     {
  5242.     &am_line_error ($var, "\`$var' is target; expected variable");
  5243.     return 0;
  5244.     }
  5245.     elsif (defined $contents{$var})
  5246.     {
  5247.     if ($cond && $conditional{$var})
  5248.     {
  5249.         # We have been asked to check for a particular condition,
  5250.         # and the variable is defined conditionally.  We need to
  5251.         # look through the conditions under which the variable is
  5252.         # defined, and see if any of them match the conditional we
  5253.         # have been asked to check.
  5254.         local (@cond_vars) = split (' ', $conditional{$var});
  5255.         while (@cond_vars)
  5256.         {
  5257.         if (&conditional_same ($cond, shift (@cond_vars)))
  5258.         {
  5259.             # Even a conditional examination is good enough
  5260.             # for us.  FIXME: really should maintain examined
  5261.             # status on a per-condition basis.
  5262.             $content_seen{$var} = 1;
  5263.             return 1;
  5264.         }
  5265.         shift (@cond_vars);
  5266.         }
  5267.  
  5268.         # The variable is not defined for the given condition.
  5269.         return 0;
  5270.     }
  5271.  
  5272.     $content_seen{$var} = 1;
  5273.     return 1;
  5274.     }
  5275.     return 0;
  5276. }
  5277.  
  5278. # Mark a variable as examined.
  5279. sub examine_variable
  5280. {
  5281.     local ($var) = @_;
  5282.     &variable_defined ($var);
  5283. }
  5284.  
  5285. # Quote a value in order to put it in $conditional.  We need to quote
  5286. # spaces, and we need to handle null strings, so that we can later
  5287. # retrieve values by splitting on space.
  5288. sub quote_cond_val
  5289. {
  5290.     local ($val) = @_;
  5291.     $val =~ s/ /\001/g;
  5292.     $val =~ s/\t/\003/g;
  5293.     $val = "\002" if $val eq '';
  5294.     return $val;
  5295. }
  5296.  
  5297. # Unquote a value in $conditional.
  5298. sub unquote_cond_val
  5299. {
  5300.     local ($val) = @_;
  5301.     $val =~ s/\001/ /g;
  5302.     $val =~ s/\003/\t/g;
  5303.     $val =~ s/\002//g;
  5304.     return $val;
  5305. }
  5306.  
  5307. # Return the set of conditions for which a variable is defined.
  5308.  
  5309. # If the variable is not defined conditionally, and is not defined in
  5310. # terms of any variables which are defined conditionally, then this
  5311. # returns the empty list.
  5312.  
  5313. # If the variable is defined conditionally, but is not defined in
  5314. # terms of any variables which are defined conditionally, then this
  5315. # returns the list of conditions for which the variable is defined.
  5316.  
  5317. # If the variable is defined in terms of any variables which are
  5318. # defined conditionally, then this returns a full set of permutations
  5319. # of the subvariable conditions.  For example, if the variable is
  5320. # defined in terms of a variable which is defined for @COND_TRUE@,
  5321. # then this returns both @COND_TRUE@ and @COND_FALSE@.  This is
  5322. # because we will need to define the variable under both conditions.
  5323.  
  5324. sub variable_conditions
  5325. {
  5326.     local ($var) = @_;
  5327.     local (%uniqify);
  5328.     local ($cond);
  5329.  
  5330.     %vars_scanned = ();
  5331.     foreach $cond (&variable_conditions_sub ($var, '', ()))
  5332.     {
  5333.     $uniqify{$cond} = 1;
  5334.     }
  5335.  
  5336.     return keys %uniqify;
  5337. }
  5338.  
  5339. # A subroutine of variable_conditions.  We only return conditions
  5340. # which are true for all the conditions in @PARENT_CONDS.
  5341. sub variable_conditions_sub
  5342. {
  5343.     local ($var, $parent, @parent_conds) = @_;
  5344.     local (@new_conds) = ();
  5345.  
  5346.     if (defined $vars_scanned{$var})
  5347.     {
  5348.     &am_line_error ($parent, "variable \`$var' recursively defined");
  5349.     return ();
  5350.     }
  5351.     $vars_scanned{$var} = 1;
  5352.  
  5353.     if (! $conditional{$var})
  5354.     {
  5355.     foreach (split (' ', $contents{$var}))
  5356.     {
  5357.         # If a comment seen, just leave.
  5358.         last if /^#/;
  5359.  
  5360.         # Handle variable substitutions.
  5361.         if (/^\$\{(.*)\}$/ || /^\$\((.*)\)$/)
  5362.         {
  5363.         push (@new_conds,
  5364.               &variable_conditions_sub ($1, $var, @parent_conds));
  5365.         }
  5366.     }
  5367.  
  5368.     # Now we want to return all permutations of the subvariable
  5369.     # conditions.
  5370.     local (%allconds, $item);
  5371.     foreach $item (@new_conds)
  5372.     {
  5373.         foreach (split ('@', $item))
  5374.         {
  5375.         next if ! $_;
  5376.         s/_(TRUE|FALSE)$//;
  5377.         $allconds{$_ . '_TRUE'} = 1;
  5378.         }
  5379.     }
  5380.  
  5381.     # Unset our entry in vars_scanned.  We only care about recursive
  5382.     # definitions.
  5383.     delete $vars_scanned{$var};
  5384.  
  5385.     return &variable_conditions_permutations (keys %allconds);
  5386.     }
  5387.  
  5388.     local (@this_conds) = ();
  5389.     local (@condvals) = split (' ', $conditional{$var});
  5390.     while (@condvals)
  5391.     {
  5392.     local ($cond) = shift (@condvals);
  5393.     local ($val) = &unquote_cond_val (shift (@condvals));
  5394.  
  5395.     if (@parent_conds)
  5396.     {
  5397.         local ($ok) = 1;
  5398.         local ($parent_cond);
  5399.         foreach $parent_cond (@parent_conds)
  5400.         {
  5401.         if (! &conditional_true_when ($parent_cond, $cond))
  5402.         {
  5403.             $ok = 0;
  5404.             last;
  5405.         }
  5406.         }
  5407.  
  5408.         next if ! $ok;
  5409.     }
  5410.  
  5411.     push (@this_conds, $cond);
  5412.  
  5413.     push (@parent_conds, $cond);
  5414.     local (@subvar_conds) = ();
  5415.     foreach (split (' ', $val))
  5416.     {
  5417.         # If a comment seen, just leave.
  5418.         last if /^#/;
  5419.  
  5420.         # Handle variable substitutions.
  5421.         if (/^\$\{(.*)\}$/ || /^\$\((.*)\)$/)
  5422.         {
  5423.         push (@subvar_conds,
  5424.               &variable_conditions_sub ($1, $var, @parent_conds));
  5425.         }
  5426.     }
  5427.     pop (@parent_conds);
  5428.  
  5429.     # If there are no conditional subvariables, then we want to
  5430.     # return this condition.  Otherwise, we want to return the
  5431.     # permutations of the subvariables.
  5432.     if (! @subvar_conds)
  5433.     {
  5434.         push (@new_conds, $cond);
  5435.     }
  5436.     else
  5437.     {
  5438.         push (@new_conds, &variable_conditions_reduce (@subvar_conds));
  5439.     }
  5440.     }
  5441.  
  5442.     # Unset our entry in vars_scanned.  We only care about recursive
  5443.     # definitions.
  5444.     delete $vars_scanned{$var};
  5445.  
  5446.     return @new_conds
  5447.     if ! $parent;
  5448.  
  5449.     # If we are being called on behalf of another variable, we need to
  5450.     # return all possible permutations of the conditions.  We have
  5451.     # already handled everything in @this_conds along with their
  5452.     # subvariables.  We now need to add any permutations that are not
  5453.     # in @this_conds.
  5454.     local ($this_cond);
  5455.     foreach $this_cond (@this_conds)
  5456.     {
  5457.     local (@perms) =
  5458.         &variable_conditions_permutations (split('@', $this_cond));
  5459.     local ($perm);
  5460.     foreach $perm (@perms)
  5461.     {
  5462.         local ($scan);
  5463.         local ($ok) = 1;
  5464.         foreach $scan (@this_conds)
  5465.         {
  5466.         if (&conditional_true_when ($perm, $scan)
  5467.             || &conditional_true_when ($scan, $perm))
  5468.         {
  5469.             $ok = 0;
  5470.             last;
  5471.         }
  5472.         }
  5473.         next if ! $ok;
  5474.  
  5475.         if (@parent_conds)
  5476.         {
  5477.         local ($ok) = 1;
  5478.         local ($parent_cond);
  5479.         foreach $parent_cond (@parent_conds)
  5480.         {
  5481.             if (! &conditional_true_when ($parent_cond, $perm))
  5482.             {
  5483.             $ok = 0;
  5484.             last;
  5485.             }
  5486.         }
  5487.  
  5488.         next if ! $ok;
  5489.         }
  5490.  
  5491.         # This permutation was not already handled, and is valid
  5492.         # for the parents.
  5493.         push (@new_conds, $perm);
  5494.     }
  5495.     }
  5496.  
  5497.     return @new_conds;
  5498. }
  5499.  
  5500. # Subroutine for variable_conditions_sort
  5501. sub variable_conditions_cmp
  5502. {
  5503.     local ($as) = $a;
  5504.     $as =~ s/[^@]//g;
  5505.     local ($bs) = $b;
  5506.     $bs =~ s/[^@]//g;
  5507.     return (length ($as) <=> length ($bs)
  5508.         || $a cmp $b);
  5509. }
  5510.  
  5511. # Sort a list of conditionals so that only the exclusive ones are
  5512. # retained.  For example, if both @COND1_TRUE@@COND2_TRUE@ and
  5513. # @COND1_TRUE@ are in the list, discard the latter.
  5514. sub variable_conditions_reduce
  5515. {
  5516.     local (@conds) = @_;
  5517.     local (@ret) = ();
  5518.     local ($cond);
  5519.     foreach $cond (sort variable_conditions_cmp @conds)
  5520.     {
  5521.     local ($ok) = 1;
  5522.     local ($scan);
  5523.     foreach $scan (@ret)
  5524.     {
  5525.         if (&conditional_true_when ($cond, $scan))
  5526.         {
  5527.         $ok = 0;
  5528.         last;
  5529.         }
  5530.     }
  5531.     next if ! $ok;
  5532.     push (@ret, $cond);
  5533.     }
  5534.  
  5535.     return @ret;
  5536. }
  5537.  
  5538. # Return a list of permutations of a conditional string.
  5539. sub variable_conditions_permutations
  5540. {
  5541.     local (@comps) = @_;
  5542.     return ()
  5543.     if ! @comps;
  5544.     local ($comp) = shift (@comps);
  5545.     return &variable_conditions_permutations (@comps)
  5546.     if $comp eq '';
  5547.     local ($neg) = $comp;
  5548.     $neg =~ s/TRUE$/TRUEO/;
  5549.     $neg =~ s/FALSE$/TRUE/;
  5550.     $neg =~ s/TRUEO$/FALSE/;
  5551.     local (@ret);
  5552.     local ($sub);
  5553.     foreach $sub (&variable_conditions_permutations (@comps))
  5554.     {
  5555.     push (@ret, '@' . $comp . '@' . $sub);
  5556.     push (@ret, '@' . $neg . '@' . $sub);
  5557.     }
  5558.     if (! @ret)
  5559.     {
  5560.     push (@ret, '@' . $comp . '@');
  5561.     push (@ret, '@' . $neg . '@');
  5562.     }
  5563.     return @ret;
  5564. }
  5565.  
  5566. # Warn if a variable is conditionally defined.  This is called if we
  5567. # are using the value of a variable.
  5568. sub variable_conditionally_defined
  5569. {
  5570.     local ($var, $parent) = @_;
  5571.     if ($conditional{$var})
  5572.     {
  5573.     if ($parent)
  5574.     {
  5575.         &am_line_error ($parent,
  5576.                 "warning: automake does not support conditional definition of $var in $parent");
  5577.     }
  5578.     else
  5579.     {
  5580.         &am_line_error ($parent,
  5581.                 "warning: automake does not support $var being defined conditionally")
  5582.     }
  5583.     }
  5584. }
  5585.  
  5586. # Get the value of a variable.  This just returns $contents, but warns
  5587. # if the variable is conditionally defined.
  5588. sub variable_value
  5589. {
  5590.     local ($var) = @_;
  5591.     &variable_conditionally_defined ($var);
  5592.     return $contents{$var};
  5593. }
  5594.  
  5595. # Convert a variable value to a list, split as whitespace.  This will
  5596. # recursively follow $(...) and ${...} inclusions.  It preserves @...@
  5597. # substitutions.  If COND is 'all', then all values under all
  5598. # conditions should be returned; if COND is a particular condition
  5599. # (all conditions are surrounded by @...@) then only the value for
  5600. # that condition should be returned; otherwise, warn if VAR is
  5601. # conditionally defined.  SCANNED is a global hash listing whose keys
  5602. # are all the variables already scanned; it is an error to rescan a
  5603. # variable.
  5604. sub value_to_list
  5605. {
  5606.     local ($var, $val, $cond) = @_;
  5607.     local (@result);
  5608.  
  5609.     foreach (split (' ', $val))
  5610.     {
  5611.     # If a comment seen, just leave.
  5612.     last if /^#/;
  5613.  
  5614.     # Handle variable substitutions.
  5615.     if (/^\$\{([^}]*)\}$/ || /^\$\(([^)]*)\)$/)
  5616.     {
  5617.         local ($varname) = $1;
  5618.  
  5619.         # If the user uses a losing variable name, just ignore it.
  5620.         # This isn't ideal, but people have requested it.
  5621.         next if ($varname =~ /\@.*\@/);
  5622.  
  5623.         local ($from, $to);
  5624.         local (@temp_list);
  5625.         if ($varname =~ /^([^:]*):([^=]*)=(.*)$/)
  5626.         {
  5627.         $varname = $1;
  5628.         $to = $3;
  5629.         ($from = $2) =~ s/(\W)/\\$1/g;
  5630.         }
  5631.  
  5632.         # Find the value.
  5633.         @temp_list = &variable_value_as_list_worker ($1, $cond, $var);
  5634.  
  5635.         # Now rewrite the value if appropriate.
  5636.         if ($from)
  5637.         {
  5638.         grep (s/$from$/$to/, @temp_list);
  5639.         }
  5640.  
  5641.         push (@result, @temp_list);
  5642.     }
  5643.     else
  5644.     {
  5645.         push (@result, $_);
  5646.     }
  5647.     }
  5648.  
  5649.     return @result;
  5650. }
  5651.  
  5652. # Return contents of variable as list, split as whitespace.  This will
  5653. # recursively follow $(...) and ${...} inclusions.  It preserves @...@
  5654. # substitutions.  If COND is 'all', then all values under all
  5655. # conditions should be returned; if COND is a particular condition
  5656. # (all conditions are surrounded by @...@) then only the value for
  5657. # that condition should be returned; otherwise, warn if VAR is
  5658. # conditionally defined.  If PARENT is specified, it is the name of
  5659. # the including variable; this is only used for error reports.
  5660. sub variable_value_as_list_worker
  5661. {
  5662.     local ($var, $cond, $parent) = @_;
  5663.     local (@result);
  5664.  
  5665.     if (defined $targets{$var})
  5666.     {
  5667.     &am_line_error ($var, "\`$var' is target; expected variable");
  5668.     }
  5669.     elsif (! defined $contents{$var})
  5670.     {
  5671.     &am_line_error ($parent, "variable \`$var' not defined");
  5672.     }
  5673.     elsif (defined $vars_scanned{$var})
  5674.     {
  5675.     # `vars_scanned' is a global we use to keep track of which
  5676.     # variables we've already examined.
  5677.     &am_line_error ($parent, "variable \`$var' recursively defined");
  5678.     }
  5679.     elsif ($cond eq 'all' && $conditional{$var})
  5680.     {
  5681.     $vars_scanned{$var} = 1;
  5682.     local (@condvals) = split (' ', $conditional{$var});
  5683.     while (@condvals)
  5684.     {
  5685.         shift (@condvals);
  5686.         local ($val) = &unquote_cond_val (shift (@condvals));
  5687.         push (@result, &value_to_list ($var, $val, $cond));
  5688.     }
  5689.     }
  5690.     elsif ($cond && $conditional{$var})
  5691.     {
  5692.     $vars_scanned{$var} = 1;
  5693.     local (@condvals) = split (' ', $conditional{$var});
  5694.     local ($onceflag);
  5695.     while (@condvals)
  5696.     {
  5697.         local ($vcond) = shift (@condvals);
  5698.         local ($val) = &unquote_cond_val (shift (@condvals));
  5699.         if (&conditional_true_when ($vcond, $cond))
  5700.         {
  5701.         # Warn if we have an ambiguity.  It's hard to know how
  5702.         # to handle this case correctly.
  5703.         &variable_conditionally_defined ($var, $parent)
  5704.             if $onceflag;
  5705.         $onceflag = 1;
  5706.         push (@result, &value_to_list ($var, $val, $cond));
  5707.         }
  5708.     }
  5709.     }
  5710.     else
  5711.     {
  5712.     $vars_scanned{$var} = 1;
  5713.     &variable_conditionally_defined ($var, $parent);
  5714.     $content_seen{$var} = 1;
  5715.     push (@result, &value_to_list ($var, $contents{$var}, $cond));
  5716.     }
  5717.  
  5718.     # Unset our entry in vars_scanned.  We only care about recursive
  5719.     # definitions.
  5720.     delete $vars_scanned{$var};
  5721.  
  5722.     return @result;
  5723. }
  5724.  
  5725. # This is just a wrapper for variable_value_as_list_worker that
  5726. # initializes the global hash `vars_scanned'.  This hash is used to
  5727. # avoid infinite recursion.
  5728. sub variable_value_as_list
  5729. {
  5730.     local ($var, $cond, $parent) = @_;
  5731.     %vars_scanned = ();
  5732.     return &variable_value_as_list_worker ($var, $cond, $parent);
  5733. }
  5734.  
  5735. # Define a new variable, but only if not already defined.
  5736. sub define_variable
  5737. {
  5738.     local ($var, $value) = @_;
  5739.  
  5740.     if (! defined $contents{$var})
  5741.     {
  5742.     $output_vars .= $var . ' = ' . $value . "\n";
  5743.     $contents{$var} = $value;
  5744.     $content_seen{$var} = 1;
  5745.     }
  5746. }
  5747.  
  5748. # Like define_variable, but the value is a list, and the variable may
  5749. # be defined conditionally.  The second argument is the conditional
  5750. # under which the value should be defined; this should be the empty
  5751. # string to define the variable unconditionally.  The third argument
  5752. # is a list holding the values to use for the variable.  The value is
  5753. # pretty printed in the output file.
  5754. sub define_pretty_variable
  5755. {
  5756.     local ($var, $cond, @value) = @_;
  5757.     if (! defined $contents{$var}
  5758.     || ($cond && ! &variable_defined ($var, $cond)))
  5759.     {
  5760.     $contents{$var} = join (' ', @value);
  5761.     if ($cond)
  5762.     {
  5763.         if ($conditional{$var})
  5764.         {
  5765.         $conditional{$var} .= ' ';
  5766.         }
  5767.         else
  5768.         {
  5769.         $conditional{$var} = '';
  5770.         }
  5771.         $conditional{$var} .= ($cond
  5772.                    . ' '
  5773.                    . "e_cond_val ($contents{$var}));
  5774.     }
  5775.     &pretty_print ($cond . $var . ' = ', $cond, @value);
  5776.     $content_seen{$var} = 1;
  5777.     }
  5778. }
  5779.  
  5780. # Like define_variable, but define a variable to be the configure
  5781. # substitution by the same name.
  5782. sub define_configure_variable
  5783. {
  5784.     local ($var) = @_;
  5785.     local ($value) = '@' . $var . '@';
  5786.     &define_variable ($var, $value);
  5787. }
  5788.  
  5789. # Define a variable that represents a program to run.  If in Cygnus
  5790. # mode, the program is searched for in the build (or source) tree.
  5791. # Otherwise no searching is done at all.  Arguments are:
  5792. # * VAR      Name of variable to define
  5793. # * WHATDIR  Either `src' or `build', depending on where program should
  5794. #            be found.  (runtest is in srcdir!)
  5795. # * SUBDIR   Subdir of top-level dir
  5796. # * PROGRAM  Name of program
  5797. # * OVERRIDE If specified, the name of the program to use when not in
  5798. #            Cygnus mode.  Defaults to PROGRAM.
  5799. sub define_program_variable
  5800. {
  5801.     local ($var, $whatdir, $subdir, $program, $override) = @_;
  5802.  
  5803.     if (! $override)
  5804.     {
  5805.     $override = $program;
  5806.     }
  5807.  
  5808.     if ($cygnus_mode)
  5809.     {
  5810.     local ($full) = ('$(top_' . $whatdir . 'dir)/../'
  5811.              . $subdir . '/' . $program);
  5812.     &define_variable ($var, ('`if test -f ' . $full
  5813.                  . '; then echo ' . $full . '; else echo '
  5814.                  . $program . '; fi`'));
  5815.     }
  5816.     else
  5817.     {
  5818.     &define_variable ($var, $override);
  5819.     }
  5820. }
  5821.  
  5822.  
  5823. ################################################################
  5824.  
  5825. # Read Makefile.am and set up %contents.  Simultaneously copy lines
  5826. # from Makefile.am into $output_trailer or $output_vars as
  5827. # appropriate.  NOTE we put rules in the trailer section.  We want
  5828. # user rules to come after our generated stuff.
  5829. sub read_am_file
  5830. {
  5831.     local ($amfile) = @_;
  5832.     local (*AM_FILE);
  5833.  
  5834.     open (AM_FILE, $amfile) || die "automake: couldn't open \`$amfile': $!\n";
  5835.     print "automake: reading $amfile\n" if $verbose;
  5836.  
  5837.     local ($saw_bk) = 0;
  5838.     local ($was_rule) = 0;
  5839.     local ($spacing) = '';
  5840.     local ($comment) = '';
  5841.     local ($last_var_name) = '';
  5842.     local ($blank) = 0;
  5843.  
  5844.     while (<AM_FILE>)
  5845.     {
  5846.     if (/$IGNORE_PATTERN/o)
  5847.     {
  5848.         # Merely delete comments beginning with two hashes.
  5849.     }
  5850.     elsif (/$WHITE_PATTERN/o)
  5851.     {
  5852.         # Stick a single white line before the incoming macro or rule.
  5853.         $spacing = "\n";
  5854.         $blank = 1;
  5855.     }
  5856.     elsif (/$COMMENT_PATTERN/o)
  5857.     {
  5858.         # Stick comments before the incoming macro or rule.  Make
  5859.         # sure a blank line preceeds first block of comments.
  5860.         $spacing = "\n" unless $blank;
  5861.         $blank = 1;
  5862.         $comment .= $spacing . $_;
  5863.         $spacing = '';
  5864.     }
  5865.     else
  5866.     {
  5867.         last;
  5868.     }
  5869.     }
  5870.  
  5871.     $output_vars .= $comment . "\n";
  5872.     $comment = '';
  5873.     $spacing = "\n";
  5874.  
  5875.     local ($is_ok_macro);
  5876.     while ($_)
  5877.     {
  5878.     $_ .= "\n"
  5879.         unless substr ($_, -1, 1) eq "\n";
  5880.  
  5881.     # Don't look at MAINTAINER_MODE_TRUE here.  That shouldn't be
  5882.     # used by users.  @MAINT@ is an anachronism now.
  5883.     $_ =~ s/\@MAINT\@//g
  5884.         unless $seen_maint_mode;
  5885.  
  5886.     if (/$IGNORE_PATTERN/o)
  5887.     {
  5888.         # Merely delete comments beginning with two hashes.
  5889.     }
  5890.     elsif (/$WHITE_PATTERN/o)
  5891.     {
  5892.         # Stick a single white line before the incoming macro or rule.
  5893.         $spacing = "\n";
  5894.         &am_line_error ($., "blank line following trailing backslash")
  5895.         if $saw_bk;
  5896.     }
  5897.     elsif (/$COMMENT_PATTERN/o)
  5898.     {
  5899.         # Stick comments before the incoming macro or rule.
  5900.         $comment .= $spacing . $_;
  5901.         $spacing = '';
  5902.         &am_line_error ($., "comment following trailing backslash")
  5903.         if $saw_bk;
  5904.     }
  5905.     elsif ($saw_bk)
  5906.     {
  5907.         if ($was_rule)
  5908.         {
  5909.         $output_trailer .= join ('', @conditional_stack) . $_;
  5910.         $saw_bk = /\\$/;
  5911.         }
  5912.         else
  5913.         {
  5914.         $saw_bk = /\\$/;
  5915.         # Chop newline and backslash if this line is
  5916.         # continued.  ensure trailing whitespace exists.
  5917.         chop if $saw_bk;
  5918.         chop if $saw_bk;
  5919.         $contents{$last_var_name} .= ' '
  5920.             unless $contents{$last_var_name} =~ /\s$/;
  5921.         $contents{$last_var_name} .= $_;
  5922.         if (@conditional_stack)
  5923.         {
  5924.             $conditional{$last_var_name} .= "e_cond_val ($_);
  5925.         }
  5926.         }
  5927.     }
  5928.     elsif (/$IF_PATTERN/o)
  5929.     {
  5930.         &am_line_error ($., "$1 does not appear in AM_CONDITIONAL")
  5931.         if (! $configure_cond{$1});
  5932.         push (@conditional_stack, "\@" . $1 . "_TRUE\@");
  5933.     }
  5934.     elsif (/$ELSE_PATTERN/o)
  5935.     {
  5936.         if (! @conditional_stack)
  5937.         {
  5938.         &am_line_error ($., "else without if");
  5939.         }
  5940.         elsif ($conditional_stack[$#conditional_stack] =~ /_FALSE\@$/)
  5941.         {
  5942.         &am_line_error ($., "else after else");
  5943.         }
  5944.         else
  5945.         {
  5946.         $conditional_stack[$#conditional_stack]
  5947.             =~ s/_TRUE\@$/_FALSE\@/;
  5948.         }
  5949.     }
  5950.     elsif (/$ENDIF_PATTERN/o)
  5951.     {
  5952.         if (! @conditional_stack)
  5953.         {
  5954.         &am_line_error ($., "endif without if");
  5955.         }
  5956.         else
  5957.         {
  5958.         pop @conditional_stack;
  5959.         }
  5960.     }
  5961.     elsif (/$RULE_PATTERN/o)
  5962.     {
  5963.         # Found a rule.
  5964.         $was_rule = 1;
  5965.         if (defined $contents{$1}
  5966.         && (@conditional_stack
  5967.             ? ! defined $conditional{$1}
  5968.             : defined $conditional{$1}))
  5969.         {
  5970.         &am_line_error ($1,
  5971.                 "$1 defined both conditionally and unconditionally");
  5972.         }
  5973.         # Value here doesn't matter; for targets we only note
  5974.         # existence.
  5975.         $contents{$1} = 1;
  5976.         $targets{$1} = 1;
  5977.         local ($cond_string) = join ('', @conditional_stack);
  5978.         if (@conditional_stack)
  5979.         {
  5980.         if ($conditional{$1})
  5981.         {
  5982.             &check_ambiguous_conditional ($1, $cond_string);
  5983.             $conditional{$1} .= ' ';
  5984.         }
  5985.         else
  5986.         {
  5987.             $conditional{$1} = '';
  5988.         }
  5989.         $conditional{$1} .= $cond_string . ' 1';
  5990.         }
  5991.         $content_lines{$1} = $.;
  5992.         $output_trailer .= $comment . $spacing . $cond_string . $_;
  5993.         $comment = $spacing = '';
  5994.         $saw_bk = /\\$/;
  5995.  
  5996.         # Check the rule for being a suffix rule. If so, store in
  5997.         # a hash.
  5998.  
  5999.         local ($source_suffix);
  6000.         local ($object_suffix);
  6001.  
  6002.         if (($source_suffix, $object_suffix) = ($1 =~ $SUFFIX_RULE_PATTERN))
  6003.         {
  6004.           $suffix_rules{$source_suffix} = $object_suffix;
  6005.           print "Sources ending in .$source_suffix become .$object_suffix\n" if $verbose;
  6006.           $source_suffix_pattern = "(" . join('|', keys %suffix_rules) . ")";
  6007.         }
  6008.  
  6009.         # FIXME: make sure both suffixes are in SUFFIXES? Or set
  6010.         # SUFFIXES from suffix_rules?
  6011.     }
  6012.     elsif (($is_ok_macro = /$MACRO_PATTERN/o)
  6013.            || /$BOGUS_MACRO_PATTERN/o)
  6014.     {
  6015.         # Found a macro definition.
  6016.         $was_rule = 0;
  6017.         $last_var_name = $1;
  6018.         if (defined $contents{$1}
  6019.         && (@conditional_stack
  6020.             ? ! defined $conditional{$1}
  6021.             : defined $conditional{$1}))
  6022.         {
  6023.         &am_line_error ($1,
  6024.                 "$1 defined both conditionally and unconditionally");
  6025.         }
  6026.         local ($value);
  6027.         if ($3 ne '' && substr ($3, -1) eq "\\")
  6028.         {
  6029.         $value = substr ($3, 0, length ($3) - 1);
  6030.         }
  6031.         else
  6032.         {
  6033.         $value = $3;
  6034.         }
  6035.         local ($type) = $2;
  6036.         if ($type eq '+')
  6037.         {
  6038.         if (! defined $contents{$last_var_name}
  6039.             && defined $configure_vars{$last_var_name})
  6040.         {
  6041.             $contents{$last_var_name} = '@' . $last_var_name . '@';
  6042.         }
  6043.         $contents{$last_var_name} .= ' ' . $value;
  6044.         }
  6045.         else
  6046.         {
  6047.         $contents{$last_var_name} = $value;
  6048.         # The first assignment to a macro sets the line
  6049.         # number.  Ideally I suppose we would associate line
  6050.         # numbers with random bits of text.
  6051.         $content_lines{$last_var_name} = $.;
  6052.         }
  6053.         local ($cond_string) = join ('', @conditional_stack);
  6054.         if (@conditional_stack)
  6055.         {
  6056.         local ($found) = 0;
  6057.         local ($val);
  6058.         if ($conditional{$last_var_name})
  6059.         {
  6060.             if ($type eq '+')
  6061.             {
  6062.             # If we're adding to the conditional, and it
  6063.             # exists, then we might want to simply replace
  6064.             # the old value with the new one.
  6065.             local (@new_vals, @cond_vals);
  6066.             @cond_vals = split (' ', $conditional{$last_var_name});
  6067.             while (@cond_vals)
  6068.             {
  6069.                 local ($vcond) = shift (@cond_vals);
  6070.                 push (@new_vals, $vcond);
  6071.                 if (&conditional_same ($vcond, $cond_string))
  6072.                 {
  6073.                 $found = 1;
  6074.                 $val = (&unquote_cond_val (shift (@cond_vals))
  6075.                     . ' ' . $value);
  6076.                 push (@new_vals, "e_cond_val ($val));
  6077.                 }
  6078.                 else
  6079.                 {
  6080.                 push (@new_vals, shift (@cond_vals));
  6081.                 }
  6082.             }
  6083.             if ($found)
  6084.             {
  6085.                 $conditional{$last_var_name}
  6086.                     = join (' ', @new_vals);
  6087.             }
  6088.             }
  6089.  
  6090.             if (! $found)
  6091.             {
  6092.             &check_ambiguous_conditional ($last_var_name,
  6093.                               $cond_string);
  6094.             $conditional{$last_var_name} .= ' ';
  6095.             $val = $value;
  6096.             }
  6097.         }
  6098.         else
  6099.         {
  6100.             $conditional{$last_var_name} = '';
  6101.             $val = $contents{$last_var_name};
  6102.         }
  6103.         if (! $found)
  6104.         {
  6105.             $conditional{$last_var_name} .= ($cond_string
  6106.                              . ' '
  6107.                              . "e_cond_val ($val));
  6108.         }
  6109.         }
  6110.  
  6111.         # FIXME: this doesn't always work correctly; it will group
  6112.         # all comments for a given variable, no matter where
  6113.         # defined.
  6114.         $am_vars{$last_var_name} = $comment . $spacing;
  6115.         $def_type{$last_var_name} = ($type eq ':') ? ':' : '';
  6116.         push (@var_list, $last_var_name);
  6117.         $comment = $spacing = '';
  6118.         $saw_bk = /\\$/;
  6119.  
  6120.         # Error if bogus.
  6121.         &am_line_error ($., "bad macro name \`$last_var_name'")
  6122.         if ! $is_ok_macro;
  6123.     }
  6124.         elsif (/$INCLUDE_PATTERN/o)
  6125.         {
  6126.             local ($path) = $1;
  6127.  
  6128.             if ($path =~ s/^\$\(top_srcdir\)\///)
  6129.             {
  6130.                 push (@include_stack, "\$\(top_srcdir\)/$path");
  6131.             }
  6132.             else
  6133.             {
  6134.                 $path =~ s/\$\(srcdir\)\///;
  6135.                 push (@include_stack, "\$\(srcdir\)/$path");
  6136.                 $path = $relative_dir . "/" . $path;
  6137.             }
  6138.             &read_am_file ($path);
  6139.         }
  6140.     else
  6141.         {
  6142.         # This isn't an error; it is probably a continued rule.
  6143.         # In fact, this is what we assume.
  6144.         $was_rule = 1;
  6145.         $output_trailer .= ($comment . $spacing
  6146.                 . join ('', @conditional_stack) . $_);
  6147.         $comment = $spacing = '';
  6148.         $saw_bk = /\\$/;
  6149.     }
  6150.  
  6151.     $_ = <AM_FILE>;
  6152.     }
  6153.  
  6154.     $output_trailer .= $comment;
  6155.  
  6156.     &am_error ("unterminated conditionals: " . join (' ', @conditional_stack))
  6157.     if (@conditional_stack);
  6158. }
  6159.  
  6160. # Read main am file.
  6161. sub read_main_am_file
  6162. {
  6163.     local ($amfile) = @_;
  6164.  
  6165.     $output_vars = ("# $in_file_name generated automatically by automake "
  6166.             . $VERSION . " from $am_file_name\n");
  6167.  
  6168.     # Generate copyright for generated Makefile.in.
  6169.     $output_vars .= $gen_copyright;
  6170.  
  6171.     # The keys here are variables we want to dump at the end of this
  6172.     # function.  The values are corresponding comments.
  6173.     local (%am_vars) = ();
  6174.     local (@var_list) = ();
  6175.     local (%def_type) = ();
  6176.  
  6177.     &read_am_file ($amfile);
  6178.  
  6179.     # Compute relative location of the top object directory.
  6180.     local (@topdir) = ();
  6181.     foreach (split (/\//, $relative_dir))
  6182.     {
  6183.     next if $_ eq '.' || $_ eq '';
  6184.     if ($_ eq '..')
  6185.     {
  6186.         pop @topdir;
  6187.     }
  6188.     else
  6189.     {
  6190.         push (@topdir, '..');
  6191.     }
  6192.     }
  6193.     @topdir = ('.') if ! @topdir;
  6194.  
  6195.     $top_builddir = join ('/', @topdir);
  6196.     local ($build_rx);
  6197.     ($build_rx = $top_builddir) =~ s/(\W)/\\$1/g;
  6198.     $output_vars .= &file_contents_with_transform
  6199.                         ('s/\@top_builddir\@/' . $build_rx . '/g;',
  6200.              'header-vars');
  6201.  
  6202.     # Generate some useful variables when AC_CANONICAL_* used.  FIXME:
  6203.     # this should use generic %configure_vars method.
  6204.     if ($seen_canonical)
  6205.     {
  6206.     local ($curs, %vars);
  6207.     $vars{'host_alias'} = 'host_alias';
  6208.     $vars{'host_triplet'} = 'host';
  6209.     if ($seen_canonical == $AC_CANONICAL_SYSTEM)
  6210.     {
  6211.         $vars{'build_alias'} = 'build_alias';
  6212.         $vars{'build_triplet'} = 'build';
  6213.         $vars{'target_alias'} = 'target_alias';
  6214.         $vars{'target_triplet'} = 'target';
  6215.     }
  6216.     foreach $curs (sort keys %vars)
  6217.     {
  6218.         $output_vars .= "$curs = \@$vars{$curs}\@\n";
  6219.         $contents{$curs} = "\@$vars{$curs}\@";
  6220.     }
  6221.     }
  6222.  
  6223.     local ($curs);
  6224.     foreach $curs (sort keys %configure_vars)
  6225.     {
  6226.     &define_configure_variable ($curs);
  6227.     }
  6228.  
  6229.     # Now dump the variables that were defined.  We do it in the same
  6230.     # order in which they were defined (skipping duplicates).
  6231.     local (%done);
  6232.     foreach $curs (@var_list)
  6233.     {
  6234.     next if $done{$curs};
  6235.     $done{$curs} = 1;
  6236.  
  6237.     $output_vars .= $am_vars{$curs};
  6238.     if ($conditional{$curs})
  6239.     {
  6240.         local (@cond_vals) = split (' ', $conditional{$curs});
  6241.         while (@cond_vals)
  6242.         {
  6243.         local ($vcond) = shift (@cond_vals);
  6244.         local ($val) = &unquote_cond_val (shift (@cond_vals));
  6245.         $output_vars .= ($vcond . $curs
  6246.                  . ' ' . $def_type{$curs} . '= '
  6247.                  . $val . "\n");
  6248.         }
  6249.     }
  6250.     else
  6251.     {
  6252.         $output_vars .= ($curs . ' ' . $def_type{$curs} . '= '
  6253.                  . $contents{$curs} . "\n");
  6254.     }
  6255.     }
  6256. }
  6257.  
  6258. ################################################################
  6259.  
  6260. sub initialize_global_constants
  6261. {
  6262.     # Values for AC_CANONICAL_*
  6263.     $AC_CANONICAL_HOST = 1;
  6264.     $AC_CANONICAL_SYSTEM = 2;
  6265.  
  6266.     # Associative array of standard directory names.  Entry is TRUE if
  6267.     # corresponding directory should be installed during
  6268.     # 'install-exec' phase.
  6269.     %exec_dir_p =
  6270.     ('bin', 1,
  6271.      'sbin', 1,
  6272.      'libexec', 1,
  6273.      'data', 0,
  6274.      'sysconf', 1,
  6275.      'localstate', 1,
  6276.      'lib', 1,
  6277.      'info', 0,
  6278.      'man', 0,
  6279.      'include', 0,
  6280.      'oldinclude', 0,
  6281.      'pkgdata', 0,
  6282.      'pkglib', 1,
  6283.      'pkginclude', 0
  6284.      );
  6285.  
  6286.     # Commonly found files we look for and automatically include in
  6287.     # DISTFILES.
  6288.     @common_files =
  6289.     (
  6290.      "README", "THANKS", "TODO", "NEWS", "COPYING", "COPYING.LIB",
  6291.      "INSTALL", "ABOUT-NLS", "ChangeLog", "configure.ac",
  6292.      "configure.in", "configure", "config.guess", "config.sub",
  6293.      "AUTHORS", "BACKLOG", "ABOUT-GNU", "libversion.in",
  6294.      "mdate-sh", "mkinstalldirs", "install-sh", 'texinfo.tex',
  6295.      "ansi2knr.c", "ansi2knr.1", 'elisp-comp',
  6296.      'ylwrap', 'acinclude.m4', @libtoolize_files, @libtoolize_sometimes,
  6297.      'missing'
  6298.      );
  6299.  
  6300.     # Commonly used files we auto-include, but only sometimes.
  6301.     @common_sometimes =
  6302.     (
  6303.      "aclocal.m4", "acconfig.h", "config.h.top",
  6304.      "config.h.bot", "stamp-h.in", 'stamp-vti'
  6305.      );
  6306.  
  6307.     $USAGE = "\
  6308.   -a, --add-missing     add missing standard files to package
  6309.   --amdir=DIR           directory storing config files
  6310.   --build-dir=DIR       directory where build being done (for dependencies)
  6311.   -c, --copy            with -a, copy missing files (default is symlink)
  6312.   --cygnus              assume program is part of Cygnus-style tree
  6313.   --foreign             set strictness to foreign
  6314.   --gnits               set strictness to gnits
  6315.   --gnu                 set strictness to gnu
  6316.   --help                print this help, then exit
  6317.   -i, --include-deps    include generated dependencies in Makefile.in
  6318.   --no-force            only update Makefile.in's that are out of date
  6319.   -o DIR, --output-dir=DIR
  6320.                         put generated Makefile.in's into DIR
  6321.   --srcdir-name=DIR     name used for srcdir (for dependencies)
  6322.   -v, --verbose         verbosely list files processed
  6323.   --version             print version number, then exit\n";
  6324.  
  6325.     # Copyright on generated Makefile.ins.
  6326.     $gen_copyright = "\
  6327. # Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
  6328. # This Makefile.in is free software; the Free Software Foundation
  6329. # gives unlimited permission to copy and/or distribute it,
  6330. # with or without modifications, as long as this notice is preserved.
  6331.  
  6332. # This program is distributed in the hope that it will be useful,
  6333. # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
  6334. # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  6335. # PARTICULAR PURPOSE.
  6336. ";
  6337.  
  6338.     # Ignore return result from chmod, because it might give an error
  6339.     # if we chmod a symlink.
  6340.     $dist_header = "\t" . '-chmod -R a+r $(distdir)' . "\n";
  6341.     $dist{'dist-tarZ'} = ("\t"
  6342.              . '$(TAR) chf - $(distdir) | compress -c > $(distdir).tar.Z'
  6343.              . "\n");
  6344.     $dist{'dist-shar'} = ("\t"
  6345.              . 'shar $(distdir) | gzip > $(distdir).shar.gz'
  6346.              . "\n");
  6347.     $dist{'dist-zip'} = "\t" . 'zip -rq $(distdir).zip $(distdir)' . "\n";
  6348.     $dist{'dist'} = "\t" .  'GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)' . "\n";
  6349.     $dist_trailer = "\t" . '-rm -rf $(distdir)' . "\n";
  6350. }
  6351.  
  6352. # (Re)-Initialize per-Makefile.am variables.
  6353. sub initialize_per_input
  6354. {
  6355.     # These two variables are used when generating each Makefile.in.
  6356.     # They hold the Makefile.in until it is ready to be printed.
  6357.     $output_rules = '';
  6358.     $output_vars = '';
  6359.     $output_trailer = '';
  6360.     $output_all = '';
  6361.     $output_header = '';
  6362.  
  6363.     # Suffixes found during a run.
  6364.     @suffixes = ();
  6365.  
  6366.     # This holds the contents of a Makefile.am, as parsed by
  6367.     # read_am_file.
  6368.     %contents = ();
  6369.  
  6370.     # This holds the names which are targets.  These also appear in
  6371.     # %contents.
  6372.     %targets = ();
  6373.  
  6374.     # For a variable or target which is defined conditionally, this
  6375.     # holds an array of the conditional values.  The array is composed
  6376.     # of pairs of condition strings (the variables which configure
  6377.     # will substitute) and values (the value of a target is
  6378.     # meaningless).  For an unconditional variable, this is empty.
  6379.     %conditional = ();
  6380.  
  6381.     # This holds the line numbers at which various elements of
  6382.     # %contents are defined.
  6383.     %content_lines = ();
  6384.  
  6385.     # This holds a 1 if a particular variable was examined.
  6386.     %content_seen = ();
  6387.  
  6388.     # This is the conditional stack.
  6389.     @conditional_stack = ();
  6390.  
  6391.     # This holds the set of included files.
  6392.     @include_stack = ();
  6393.  
  6394.     # This holds the "relative directory" of the current Makefile.in.
  6395.     # Eg for src/Makefile.in, this is "src".
  6396.     $relative_dir = '';
  6397.  
  6398.     # This holds a list of files that are included in the
  6399.     # distribution.
  6400.     %dist_common = ();
  6401.  
  6402.     # List of dependencies for the obvious targets.
  6403.     @install_data = ();
  6404.     @install_exec = ();
  6405.     @uninstall = ();
  6406.     @installdirs = ();
  6407.  
  6408.     @info = ();
  6409.     @dvi = ();
  6410.     @all = ();
  6411.     @check = ();
  6412.     @check_tests = ();
  6413.     @installcheck = ();
  6414.     @clean = ();
  6415.  
  6416.     @phony = ();
  6417.  
  6418.     # A list of files deleted by `maintainer-clean'.
  6419.     @maintainer_clean_files = ();
  6420.  
  6421.     # These are pretty obvious, too.  They are used to define the
  6422.     # SOURCES and OBJECTS variables.
  6423.     @sources = ();
  6424.     @objects = ();
  6425.  
  6426.     # These variables track inclusion of various compile-related .am
  6427.     # files.  $included_generic_compile is TRUE if the basic code has
  6428.     # been included.  $included_knr_compile is TRUE if the ansi2knr
  6429.     # code has been included.  $included_libtool_compile is TRUE if
  6430.     # libtool support has been included.
  6431.     $included_generic_compile = 0;
  6432.     $included_knr_compile = 0;
  6433.     $included_libtool_compile = 0;
  6434.  
  6435.     # TRUE if install targets should work recursively.
  6436.     $recursive_install = 0;
  6437.  
  6438.     # All .P files.
  6439.     %dep_files = ();
  6440.  
  6441.     # Strictness levels.
  6442.     $strictness = $default_strictness;
  6443.     $strictness_name = $default_strictness_name;
  6444.  
  6445.     # Options from AUTOMAKE_OPTIONS.
  6446.     %options = ();
  6447.  
  6448.     # Whether or not dependencies are handled.  Can be further changed
  6449.     # in handle_options.
  6450.     $use_dependencies = $cmdline_use_dependencies;
  6451.  
  6452.     # Per Makefile.am.
  6453.     $local_maint_charset = $maint_charset;
  6454.  
  6455.     # All yacc and lex source filenames for this directory.  Use
  6456.     # filenames instead of raw count so that multiple instances are
  6457.     # counted correctly (eg one yacc file can appear in multiple
  6458.     # programs without harm).
  6459.     %yacc_sources = ();
  6460.     %lex_sources = ();
  6461.  
  6462.     # This is a list of all targets to run during "make dist".
  6463.     @dist_targets = ();
  6464.  
  6465.     # Keys in this hash are the basenames of files which must depend
  6466.     # on ansi2knr.
  6467.     %de_ansi_files = ();
  6468.  
  6469.     # This maps the source extension of a suffix rule to its
  6470.     # corresponding output extension.
  6471.     %suffix_rules = ();
  6472.  
  6473.     # This is the name of the recursive `all' target to use.
  6474.     $all_target = 'all-recursive';
  6475.  
  6476.     # This keeps track of which extensions we've seen (that we care
  6477.     # about).
  6478.     %extension_seen = ();
  6479.  
  6480.     # This is random scratch space for the language finish functions.
  6481.     # Don't randomly overwrite it; examine other uses of keys first.
  6482.     %language_scratch = ();
  6483. }
  6484.  
  6485.  
  6486. ################################################################
  6487.  
  6488. # Return contents of a file from $am_dir, automatically skipping
  6489. # macros or rules which are already known.  Runs command on each line
  6490. # as it is read; this command can modify $_.
  6491. sub file_contents_with_transform
  6492. {
  6493.     local ($command, $basename) = @_;
  6494.     local ($file) = $am_dir . '/' . $basename . '.am';
  6495.  
  6496.     if ($command ne '' && substr ($command, -1) ne ';')
  6497.     {
  6498.     die "automake: programming error in file_contents_with_transform: $command\n";
  6499.     }
  6500.  
  6501.     open (FC_FILE, $file)
  6502.     || die "automake: installation error: cannot open \`$file'\n";
  6503.     # Looks stupid?
  6504.     # print "automake: reading $file\n" if $verbose;
  6505.  
  6506.     local ($was_rule) = 0;
  6507.     local ($result_vars) = '';
  6508.     local ($result_rules) = '';
  6509.     local ($comment) = '';
  6510.     local ($spacing) = "\n";
  6511.     local ($skipping) = 0;
  6512.     local ($had_chars);
  6513.  
  6514.     while (<FC_FILE>)
  6515.     {
  6516.     $_ =~ s/\@MAINTAINER_MODE_TRUE\@//g
  6517.         unless $seen_maint_mode;
  6518.  
  6519.     $had_chars = length ($_) && $_ ne "\n";
  6520.     eval $command;
  6521.     # If the transform caused all the characters to go away, then
  6522.     # ignore the line.  Why do this?  Because in Perl 4, a "next"
  6523.     # inside of an eval doesn't affect a loop outside the eval.
  6524.     # So we can't pass in a "transform" that uses next.  We used
  6525.     # to do this.  "Empty" also means consisting of a single
  6526.     # newline.
  6527.     next if $had_chars && ($_ eq '' || $_ eq "\n");
  6528.  
  6529.     if (/$IGNORE_PATTERN/o)
  6530.     {
  6531.         # Merely delete comments beginning with two hashes.
  6532.     }
  6533.     elsif (/$WHITE_PATTERN/o)
  6534.     {
  6535.         # Stick a single white line before the incoming macro or rule.
  6536.         $spacing = "\n";
  6537.         &am_line_error ($., "blank line following trailing backslash")
  6538.         if $saw_bk;
  6539.     }
  6540.     elsif (/$COMMENT_PATTERN/o)
  6541.     {
  6542.         # Stick comments before the incoming macro or rule.
  6543.         $comment .= $spacing . $_;
  6544.         $spacing = '';
  6545.         &am_line_error ($., "comment following trailing backslash")
  6546.         if $saw_bk;
  6547.     }
  6548.     elsif ($saw_bk)
  6549.     {
  6550.         if ($was_rule)
  6551.         {
  6552.         $result_rules .= $_ if ! $skipping;
  6553.         }
  6554.         else
  6555.         {
  6556.         $result_vars .= $_ if ! $skipping;
  6557.         }
  6558.         $saw_bk = /\\$/;
  6559.     }
  6560.     elsif (/$RULE_PATTERN/o)
  6561.     {
  6562.         # Found a rule.
  6563.         $was_rule = 1;
  6564.         $skipping = defined $contents{$1};
  6565.         $result_rules .= $comment . $spacing . $_ if ! $skipping;
  6566.         $comment = $spacing = '';
  6567.         $saw_bk = /\\$/;
  6568.     }
  6569.     elsif (/$MACRO_PATTERN/o)
  6570.     {
  6571.         # Found a variable reference.
  6572.         $was_rule = 0;
  6573.         $skipping = defined $contents{$1};
  6574.         $result_vars .= $comment . $spacing . $_ if ! $skipping;
  6575.         $comment = $spacing = '';
  6576.         $saw_bk = /\\$/;
  6577.     }
  6578.     else
  6579.     {
  6580.         # This isn't an error; it is probably a continued rule.
  6581.         # In fact, this is what we assume.
  6582.         $was_rule = 1;
  6583.         $result_rules .= $comment . $spacing . $_ if ! $skipping;
  6584.         $comment = $spacing = '';
  6585.         $saw_bk = /\\$/;
  6586.     }
  6587.     }
  6588.  
  6589.     close (FC_FILE);
  6590.     return $result_vars . $result_rules . $comment;
  6591. }
  6592.  
  6593. # Like file_contents_with_transform, but no transform.
  6594. sub file_contents
  6595. {
  6596.     return &file_contents_with_transform ('', @_);
  6597. }
  6598.  
  6599. # Find all variable prefixes that are used for install directories.  A
  6600. # prefix `zar' qualifies iff:
  6601. # * `zardir' is a variable.
  6602. # * `zar_PRIMARY' is a variable.
  6603. sub am_primary_prefixes
  6604. {
  6605.     local ($primary, @prefixes) = @_;
  6606.  
  6607.     local (%valid, $varname);
  6608.     grep ($valid{$_} = 0, @prefixes);
  6609.     $valid{'EXTRA'} = 0;
  6610.     foreach $varname (keys %contents)
  6611.     {
  6612.     if ($varname =~ /^(.*)_$primary$/)
  6613.     {
  6614.         if (! defined $valid{$1}
  6615.         && ! &variable_defined ($1 . 'dir')
  6616.         # Note that a configure variable is always legitimate.
  6617.         # It is natural to name such variables after the
  6618.         # primary, so we explicitly allow it.
  6619.         && ! defined $configure_vars{$varname})
  6620.         {
  6621.         &am_line_error ($varname, "invalid variable \`$varname'");
  6622.         }
  6623.         else
  6624.         {
  6625.         # Ensure all extended prefixes are actually used.
  6626.         $valid{$1} = 1;
  6627.         }
  6628.     }
  6629.     }
  6630.  
  6631.     return %valid;
  6632. }
  6633.  
  6634. # Handle `where_HOW' variable magic.  Does all lookups, generates
  6635. # install code, and possibly generates code to define the primary
  6636. # variable.  The first argument is the name of the .am file to munge,
  6637. # the second argument is the primary variable (eg HEADERS), and all
  6638. # subsequent arguments are possible installation locations.  Returns
  6639. # list of all values of all _HOW targets.
  6640. #
  6641. # FIXME: this should be rewritten to be cleaner.  It should be broken
  6642. # up into multiple functions.
  6643. #
  6644. # Usage is: am_install_var (OPTION..., file, HOW, where...)
  6645. sub am_install_var
  6646. {
  6647.     local (@args) = @_;
  6648.  
  6649.     local ($do_clean) = 0;
  6650.     local ($do_require) = 1;
  6651.  
  6652.     local ($ltxform);
  6653.     if (defined $configure_vars{'LIBTOOL'})
  6654.     {
  6655.     # Transform '@LIBTOOL ...@' to '$(LIBTOOL) ...'
  6656.     $ltxform = 's/\@LIBTOOL([^\@]*)\@/\$(LIBTOOL) $1/;';
  6657.     }
  6658.     else
  6659.     {
  6660.     # Delete '@LIBTOOL ...@'
  6661.     $ltxform = 's/\@LIBTOOL([^\@]*)\@//;';
  6662.     }
  6663.  
  6664.     local ($cygxform);
  6665.     if (! $seen_exeext)
  6666.     {
  6667.     $cygxform = 's/\@EXEEXT\@//g;';
  6668.     }
  6669.     else
  6670.     {
  6671.     $cygxform = 's/\@EXEEXT\@/\$(EXEEXT)/g;';
  6672.     }
  6673.  
  6674.     while (@args)
  6675.     {
  6676.     if ($args[0] eq '-clean')
  6677.     {
  6678.         $do_clean = 1;
  6679.     }
  6680.     elsif ($args[0] eq '-noextra')
  6681.     {
  6682.         $do_require = 0;
  6683.     }
  6684.     elsif ($args[0] !~ /^-/)
  6685.     {
  6686.         last;
  6687.     }
  6688.     shift (@args);
  6689.     }
  6690.     local ($file, $primary, @prefixes) = @args;
  6691.  
  6692.     local (@used) = ();
  6693.     local (@result) = ();
  6694.  
  6695.     # Now that configure substitutions are allowed in where_HOW
  6696.     # variables, it is an error to actually define the primary.  We
  6697.     # allow `JAVA', as it is customarily used to mean the Java
  6698.     # interpreter.  This is but one of several Java hacks.
  6699.     &am_line_error ($primary, "\`$primary' is an anachronism")
  6700.     if &variable_defined ($primary) && $primary ne 'JAVA';
  6701.  
  6702.  
  6703.     # Look for misspellings.  It is an error to have a variable ending
  6704.     # in a "reserved" suffix whose prefix is unknown, eg
  6705.     # "bni_PROGRAMS".  However, unusual prefixes are allowed if a
  6706.     # variable of the same name (with "dir" appended) exists.  For
  6707.     # instance, if the variable "zardir" is defined, then
  6708.     # "zar_PROGRAMS" becomes valid.  This is to provide a little extra
  6709.     # flexibility in those cases which need it.  Perhaps it should be
  6710.     # disallowed in the Gnits case?  The problem is, sometimes it is
  6711.     # useful to put things in a subdir of eg pkgdatadir, perhaps even
  6712.     # for Gnitsoids.
  6713.     local (%valid) = &am_primary_prefixes ($primary, @prefixes);
  6714.  
  6715.     # If a primary includes a configure substitution, then the EXTRA_
  6716.     # form is required.  Otherwise we can't properly do our job.
  6717.     local ($require_extra);
  6718.     local ($warned_about_extra) = 0;
  6719.  
  6720.     local ($clean_file) = $file . '-clean';
  6721.     local ($one_name);
  6722.     local ($X);
  6723.     foreach $X (sort keys %valid)
  6724.     {
  6725.     $one_name = $X . '_' . $primary;
  6726.     if (&variable_defined ($one_name))
  6727.     {
  6728.         # Append actual contents of where_PRIMARY variable to
  6729.         # result.
  6730.         local ($rcurs);
  6731.         foreach $rcurs (&variable_value_as_list ($one_name, 'all'))
  6732.         {
  6733.         # Skip configure substitutions.  Possibly bogus.
  6734.         if ($rcurs =~ /^\@.*\@$/)
  6735.         {
  6736.             if ($X eq 'EXTRA')
  6737.             {
  6738.             if (! $warned_about_extra)
  6739.             {
  6740.                 $warned_about_extra = 1;
  6741.                 {
  6742.                 &am_line_error ($one_name,
  6743.                         "\`$one_name' contains configure substitution, but shouldn't");
  6744.                 }
  6745.             }
  6746.             }
  6747.             # Check here to make sure variables defined in
  6748.             # configure.ac do not imply that EXTRA_PRIMARY
  6749.             # must be defined.
  6750.             elsif (! defined $configure_vars{$one_name})
  6751.             {
  6752.             $require_extra = $one_name
  6753.                 if $do_require;
  6754.             }
  6755.  
  6756.             next;
  6757.         }
  6758.  
  6759.         push (@result, $rcurs);
  6760.         }
  6761.  
  6762.         # "EXTRA" shouldn't be used when generating clean targets,
  6763.         # all, or install targets.
  6764.         if ($X eq 'EXTRA')
  6765.         {
  6766.         if (! $warned_about_extra && ! $do_require)
  6767.         {
  6768.             $warned_about_extra = 1;
  6769.             &am_line_error ($one_name,
  6770.                     "\`$one_name' should not be defined");
  6771.         }
  6772.         next;
  6773.         }
  6774.  
  6775.         # A blatant hack: we rewrite each _PROGRAMS primary to
  6776.         # include EXEEXT when in Cygwin32 mode.
  6777.         if ($seen_exeext && $primary eq 'PROGRAMS')
  6778.         {
  6779.         local (@conds) = &variable_conditions ($one_name);
  6780.         local (@one_binlist);
  6781.  
  6782.         # FIXME: this definitely loses aesthetically; it
  6783.         # redefines $ONE_NAME.  Instead we should arrange for
  6784.         # variable definitions to be output later, instead of
  6785.         # at scan time.
  6786.  
  6787.         if (! @conds)
  6788.         {
  6789.             @one_binlist = ();
  6790.             foreach $rcurs (&variable_value_as_list ($one_name, ''))
  6791.             {
  6792.             if ($rcurs =~ /\./ || $rcurs =~ /^\@.*\@$/)
  6793.             {
  6794.                 push (@one_binlist, $rcurs);
  6795.             }
  6796.             else
  6797.             {
  6798.                 push (@one_binlist, $rcurs . '$(EXEEXT)');
  6799.             }
  6800.             }
  6801.  
  6802.             delete $contents{$one_name};
  6803.             &define_pretty_variable ($one_name, '', @one_binlist);
  6804.         }
  6805.         else
  6806.         {
  6807.             local ($cond);
  6808.             local ($condvals) = '';
  6809.             foreach $cond (@conds)
  6810.             {
  6811.             @one_binlist = ();
  6812.             local (@condval) = &variable_value_as_list ($one_name,
  6813.                                     $cond);
  6814.             foreach $rcurs (@condval)
  6815.             {
  6816.                 if ($rcurs =~ /\./ || $rcurs =~ /^\@.*\@$/)
  6817.                 {
  6818.                 push (@one_binlist, $rcurs);
  6819.                 }
  6820.                 else
  6821.                 {
  6822.                 push (@one_binlist, $rcurs . '$(EXEEXT)');
  6823.                 }
  6824.             }
  6825.  
  6826.             push (@condvals, $cond);
  6827.             push (@condvals, join (' ', @one_binlist));
  6828.             }
  6829.  
  6830.             delete $contents{$one_name};
  6831.  
  6832.             while (@condvals)
  6833.             {
  6834.             $cond = shift (@condvals);
  6835.             local (@val) = split (' ', shift (@condvals));
  6836.             &define_pretty_variable ($one_name, $cond, @val);
  6837.             }
  6838.         }
  6839.         }
  6840.  
  6841.         if ($do_clean)
  6842.         {
  6843.         $output_rules .=
  6844.             &file_contents_with_transform ('s/\@DIR\@/' . $X . '/go;'
  6845.                            . $cygxform,
  6846.                            $clean_file);
  6847.  
  6848.         push (@clean, $X . $primary);
  6849.         &push_phony_cleaners ($X . $primary);
  6850.         }
  6851.  
  6852.         if ($X eq 'check')
  6853.         {
  6854.         push (@check, '$(' . $one_name . ')');
  6855.         }
  6856.         else
  6857.         {
  6858.         push (@used, '$(' . $one_name . ')');
  6859.         }
  6860.         if ($X eq 'noinst' || $X eq 'check')
  6861.         {
  6862.         # Objects which don't get installed by default.
  6863.         next;
  6864.         }
  6865.  
  6866.         $output_rules .=
  6867.         &file_contents_with_transform ('s/\@DIR\@/' . $X . '/g;'
  6868.                            . $ltxform . $cygxform,
  6869.                            $file);
  6870.  
  6871.         push (@uninstall, 'uninstall-' . $X . $primary);
  6872.         push (@phony, 'uninstall-' . $X . $primary);
  6873.         push (@installdirs, '$(DESTDIR)$(' . $X . 'dir)');
  6874.         if (defined $exec_dir_p{$X} ? $exec_dir_p{$X} : ($X =~ /exec/))
  6875.         {
  6876.         push (@install_exec, 'install-' . $X . $primary);
  6877.         push (@phony, 'install-' . $X . $primary);
  6878.         }
  6879.         else
  6880.         {
  6881.         push (@install_data, 'install-' . $X . $primary);
  6882.         push (@phony, 'install-' . $X . $primary);
  6883.         }
  6884.     }
  6885.     }
  6886.  
  6887.     # The JAVA variable is used as the name of the Java interpreter.
  6888.     if (@used && $primary ne 'JAVA')
  6889.     {
  6890.     # Define it.
  6891.     &define_pretty_variable ($primary, '', @used);
  6892.     $output_vars .= "\n";
  6893.     }
  6894.  
  6895.     if ($require_extra && ! &variable_defined ('EXTRA_' . $primary))
  6896.     {
  6897.     &am_line_error ($require_extra,
  6898.             "\`$require_extra' contains configure substitution, but \`EXTRA_$primary' not defined");
  6899.     }
  6900.  
  6901.     # Push here because PRIMARY might be configure time determined.
  6902.     push (@all, '$(' . $primary . ')')
  6903.     if @used && $primary ne 'JAVA';
  6904.  
  6905.     return (@result);
  6906. }
  6907.  
  6908.  
  6909. ################################################################
  6910.  
  6911. # This variable is local to the "require file" set of functions.
  6912. @require_file_paths = ();
  6913.  
  6914. # Verify that the file must exist in the current directory.  Usage:
  6915. # require_file (isconfigure, line_number, strictness, file) strictness
  6916. # is the strictness level at which this file becomes required.  Must
  6917. # set require_file_paths before calling this function.
  6918. # require_file_paths is set to hold a single directory (the one in
  6919. # which the first file was found) before return.
  6920. sub require_file_internal
  6921. {
  6922.     local ($is_configure, $line, $mystrict, @files) = @_;
  6923.     local ($file, $fullfile);
  6924.     local ($found_it, $errfile, $errdir);
  6925.     local ($save_dir);
  6926.  
  6927.     foreach $file (@files)
  6928.     {
  6929.     $found_it = 0;
  6930.     foreach $dir (@require_file_paths)
  6931.     {
  6932.         if ($dir eq '.')
  6933.         {
  6934.         $fullfile = $relative_dir . "/" . $file;
  6935.         $errdir = $relative_dir unless $errdir;
  6936.         }
  6937.         else
  6938.         {
  6939.         $fullfile = $dir . "/" . $file;
  6940.         $errdir = $dir unless $errdir;
  6941.         }
  6942.  
  6943.         # Use different name for "error filename".  Otherwise on
  6944.         # an error the bad file will be reported as eg
  6945.         # `../../install-sh' when using the default
  6946.         # config_aux_path.
  6947.         $errfile = $errdir . '/' . $file;
  6948.  
  6949.         if (-f $fullfile)
  6950.         {
  6951.         $found_it = 1;
  6952.         # FIXME: Once again, special-case `.'.
  6953.         &push_dist_common ($file)
  6954.             if $dir eq $relative_dir || $dir eq '.';
  6955.         $save_dir = $dir;
  6956.         last;
  6957.         }
  6958.     }
  6959.  
  6960.     if ($found_it)
  6961.     {
  6962.         # Prune the path list.
  6963.         @require_file_paths = $save_dir;
  6964.     }
  6965.     else
  6966.     {
  6967.         if ($strictness >= $mystrict)
  6968.         {
  6969.         local ($trailer) = '';
  6970.         local ($suppress) = 0;
  6971.  
  6972.         # Only install missing files according to our desired
  6973.         # strictness level.
  6974.         local ($message) = "required file \`$errfile' not found";
  6975.         if ($add_missing)
  6976.         {
  6977.             $suppress = 1;
  6978.  
  6979.             # Maybe run libtoolize.
  6980.             @libtoolize_args = ('--automake');
  6981.             push @libtoolize_args, '-c'  if $copy_missing;
  6982.             if ($seen_libtool
  6983.             && grep ($_ eq $file, @libtoolize_files)
  6984.             && system ('libtoolize', @libtoolize_args))
  6985.             {
  6986.             $message = "installing \`$errfile'";
  6987.             $suppress = 0;
  6988.             $trailer = "; cannot run \`libtoolize': $!";
  6989.             }
  6990.             elsif (-f ($am_dir . '/' . $file))
  6991.             {
  6992.             # Install the missing file.  Symlink if we
  6993.             # can, copy if we must.  Note: delete the file
  6994.             # first, in case it is a dangling symlink.
  6995.             $message = "installing \`$errfile'";
  6996.             # Windows Perl will hang if we try to delete a
  6997.             # file that doesn't exist.
  6998.             unlink ($errfile) if -f $errfile;
  6999.             if ($symlink_exists && ! $copy_missing)
  7000.             {
  7001.                 if (! symlink ($am_dir . '/' . $file, $errfile))
  7002.                 {
  7003.                 $suppress = 0;
  7004.                 $trailer = "; error while making link: $!\n";
  7005.                 }
  7006.             }
  7007.             elsif (system ('cp', $am_dir . '/' . $file, $errfile))
  7008.             {
  7009.                 $suppress = 0;
  7010.                 $trailer = "\n    error while copying\n";
  7011.             }
  7012.             }
  7013.         }
  7014.  
  7015.         local ($save) = $exit_status;
  7016.         if ($is_configure)
  7017.         {
  7018.             # FIXME: allow actual file to be specified.
  7019.             &am_conf_line_error ($configure_ac, $line,
  7020.                      "$message$trailer");
  7021.         }
  7022.         else
  7023.         {
  7024.             &am_line_error ($line, "$message$trailer");
  7025.         }
  7026.         $exit_status = $save if $suppress;
  7027.         }
  7028.     }
  7029.     }
  7030. }
  7031.  
  7032. # Like require_file_with_line, but error messages refer to
  7033. # configure.ac, not the current Makefile.am.
  7034. sub require_file_with_conf_line
  7035. {
  7036.     @require_file_paths = '.';
  7037.     &require_file_internal (1, @_);
  7038. }
  7039.  
  7040. sub require_file_with_line
  7041. {
  7042.     @require_file_paths = '.';
  7043.     &require_file_internal (0, @_);
  7044. }
  7045.  
  7046. sub require_file
  7047. {
  7048.     @require_file_paths = '.';
  7049.     &require_file_internal (0, '', @_);
  7050. }
  7051.  
  7052. # Require a file that is also required by Autoconf.  Looks in
  7053. # configuration path, as specified by AC_CONFIG_AUX_DIR.
  7054. sub require_config_file
  7055. {
  7056.     @require_file_paths = @config_aux_path;
  7057.     &require_file_internal (1, '', @_);
  7058.     local ($dir) = $require_file_paths[0];
  7059.     @config_aux_path = @require_file_paths;
  7060.     if ($dir eq '.')
  7061.     {
  7062.     $config_aux_dir = '.';
  7063.     }
  7064.     else
  7065.     {
  7066.     $config_aux_dir = '$(top_srcdir)/' . $dir;
  7067.     }
  7068. }
  7069.  
  7070. # Assumes that the line number is in Makefile.am.
  7071. sub require_conf_file_with_line
  7072. {
  7073.     @require_file_paths = @config_aux_path;
  7074.     &require_file_internal (0, @_);
  7075.     local ($dir) = $require_file_paths[0];
  7076.     @config_aux_path = @require_file_paths;
  7077.     if ($dir eq '.')
  7078.     {
  7079.     $config_aux_dir = '.';
  7080.     }
  7081.     else
  7082.     {
  7083.     $config_aux_dir = '$(top_srcdir)/' . $dir;
  7084.     }
  7085. }
  7086.  
  7087. # Assumes that the line number is in Makefile.am.
  7088. sub require_conf_file_with_conf_line
  7089. {
  7090.     @require_file_paths = @config_aux_path;
  7091.     &require_file_internal (1, @_);
  7092.     local ($dir) = $require_file_paths[0];
  7093.     @config_aux_path = @require_file_paths;
  7094.     if ($dir eq '.')
  7095.     {
  7096.     $config_aux_dir = '.';
  7097.     }
  7098.     else
  7099.     {
  7100.     $config_aux_dir = '$(top_srcdir)/' . $dir;
  7101.     }
  7102. }
  7103.  
  7104. ################################################################
  7105.  
  7106. # Push a list of files onto dist_common.
  7107. sub push_dist_common
  7108. {
  7109.     local (@files) = @_;
  7110.     local ($file);
  7111.  
  7112.     foreach $file (@files)
  7113.     {
  7114.     $dist_common{$file} = 1;
  7115.     }
  7116. }
  7117.  
  7118. # Push a list of clean targets onto phony.
  7119. sub push_phony_cleaners
  7120. {
  7121.     local ($base) = @_;
  7122.     local ($target);
  7123.     foreach $target ('mostly', 'dist', '', 'maintainer-')
  7124.     {
  7125.     push (@phony, $target . 'clean-' . $base);
  7126.     }
  7127. }
  7128.  
  7129. # Set strictness.
  7130. sub set_strictness
  7131. {
  7132.     $strictness_name = $_[0];
  7133.     if ($strictness_name eq 'gnu')
  7134.     {
  7135.     $strictness = $GNU;
  7136.     }
  7137.     elsif ($strictness_name eq 'gnits')
  7138.     {
  7139.     $strictness = $GNITS;
  7140.     }
  7141.     elsif ($strictness_name eq 'foreign')
  7142.     {
  7143.     $strictness = $FOREIGN;
  7144.     }
  7145.     else
  7146.     {
  7147.     die "automake: level \`$strictness_name' not recognized\n";
  7148.     }
  7149. }
  7150.  
  7151.  
  7152. ################################################################
  7153.  
  7154. # Return directory name of file.
  7155. sub dirname
  7156. {
  7157.     local ($file) = @_;
  7158.     local ($sub);
  7159.  
  7160.     ($sub = $file) =~ s,/+[^/]+$,,g;
  7161.     $sub = '.' if $sub eq $file;
  7162.     return $sub;
  7163. }
  7164.  
  7165. # Return file name of a file.
  7166. sub basename
  7167. {
  7168.     local ($file) = @_;
  7169.     local ($sub);
  7170.  
  7171.     ($sub = $file) =~s,^.*/+,,g;
  7172.     return $sub;
  7173. }
  7174.  
  7175. # Ensure a file exists.
  7176. sub create
  7177. {
  7178.     local ($file) = @_;
  7179.  
  7180.     open (TOUCH, ">> $file");
  7181.     close (TOUCH);
  7182. }
  7183.  
  7184. # Glob something.  Do this to avoid indentation screwups everywhere we
  7185. # want to glob.  Gross!
  7186. sub my_glob
  7187. {
  7188.     local ($pat) = @_;
  7189.     return <${pat}>;
  7190. }
  7191.  
  7192. ################################################################
  7193.  
  7194. # Print an error message and set exit status.
  7195. sub am_error
  7196. {
  7197.     warn "automake: ${am_file}.am: ", join (' ', @_), "\n";
  7198.     $exit_status = 1;
  7199. }
  7200.  
  7201. sub am_line_error
  7202. {
  7203.     local ($symbol, @args) = @_;
  7204.  
  7205.     if ($symbol && "$symbol" ne '-1')
  7206.     {
  7207.     local ($file) = "${am_file}.am";
  7208.  
  7209.     if ($symbol =~ /^\d+$/)
  7210.     {
  7211.         # SYMBOL is a line number, so just add the colon.
  7212.         $file .= ':' . $symbol;
  7213.     }
  7214.     elsif (defined $content_lines{$symbol})
  7215.     {
  7216.         # SYMBOL is a variable defined in Makefile.am, so add the
  7217.         # line number we saved from there.
  7218.         $file .= ':' . $content_lines{$symbol};
  7219.     }
  7220.     elsif (defined $configure_vars{$symbol})
  7221.     {
  7222.         # SYMBOL is a variable defined in configure.ac, so add the
  7223.         # appropriate line number.
  7224.         $file = $configure_vars{$symbol};
  7225.     }
  7226.     else
  7227.     {
  7228.         # Couldn't find the line number.
  7229.     }
  7230.     warn $file, ": ", join (' ', @args), "\n";
  7231.     $exit_status = 1;
  7232.     }
  7233.     else
  7234.     {
  7235.     &am_error (@args);
  7236.     }
  7237. }
  7238.  
  7239. # Like am_error, but while scanning configure.ac.
  7240. sub am_conf_error
  7241. {
  7242.     # FIXME: can run in subdirs.
  7243.     warn "automake: $configure_ac: ", join (' ', @_), "\n";
  7244.     $exit_status = 1;
  7245. }
  7246.  
  7247. # Error message with line number referring to configure.ac.
  7248. sub am_conf_line_error
  7249. {
  7250.     local ($file, $line, @args) = @_;
  7251.  
  7252.     if ($line)
  7253.     {
  7254.     warn "$file: $line: ", join (' ', @args), "\n";
  7255.     $exit_status = 1;
  7256.     }
  7257.     else
  7258.     {
  7259.     &am_conf_error (@args);
  7260.     }
  7261. }
  7262.  
  7263. # Warning message with line number referring to configure.ac.
  7264. # Does not affect exit_status
  7265. sub am_conf_line_warning
  7266. {
  7267.     local ($saved_exit_status) = $exit_status;
  7268.     &am_conf_line_error (@_);
  7269.     $exit_status = $saved_exit_status;
  7270. }
  7271.  
  7272. # Tell user where our aclocal.m4 is, but only once.
  7273. sub keyed_aclocal_warning
  7274. {
  7275.     local ($key) = @_;
  7276.     warn "automake: macro \`$key' can be generated by \`aclocal'\n";
  7277. }
  7278.  
  7279. # Print usage information.
  7280. sub usage
  7281. {
  7282.     print "Usage: automake [OPTION] ... [Makefile]...\n\n";
  7283.     print "Generate Makefile.in for autoconf from Makefile.am\n";
  7284.     print $USAGE;
  7285.     print "\nFiles which are automatically distributed, if found:\n";
  7286.     $~ = "USAGE_FORMAT";
  7287.     local ($last, $iter, @lcomm);
  7288.     $last = '';
  7289.     foreach $iter (sort ((@common_files, @common_sometimes)))
  7290.     {
  7291.     push (@lcomm, $iter) unless $iter eq $last;
  7292.     $last = $iter;
  7293.     }
  7294.  
  7295.     local ($cols, $rows, $rest);
  7296.     $cols = 4;
  7297.     $rows = int(@lcomm / $cols);
  7298.     $rest = @lcomm % $cols;
  7299.  
  7300.     if ($rest)
  7301.     {
  7302.         $rows++;
  7303.     }
  7304.     else
  7305.     {
  7306.         $rest = $cols
  7307.     }
  7308.  
  7309.     local ($x, $y, $idx, @four);
  7310.     for ($y = 0; $y < $rows; $y++)
  7311.     {
  7312.         @four = ("", "", "", "");
  7313.     for ($x = 0; $x < $cols; $x++)
  7314.         {
  7315.         last if $y + 1 == $rows && $x == $rest;
  7316.  
  7317.         $idx = (($x > $rest)
  7318.             ? ($rows * $rest + ($rows - 1) * ($x - $rest))
  7319.             : ($rows * $x));
  7320.         $idx += $y;
  7321.         $four[$x] = $lcomm[$idx];
  7322.     }
  7323.     write;
  7324.     }
  7325.  
  7326.     print "\nReport bugs to <bug-automake\@gnu.org>.\n";
  7327.  
  7328.     exit 0;
  7329. }
  7330.  
  7331. format USAGE_FORMAT =
  7332.   @<<<<<<<<<<<<<<<<   @<<<<<<<<<<<<<<<<   @<<<<<<<<<<<<<<<<   @<<<<<<<<<<<<<<<<
  7333.   $four[0],           $four[1],           $four[2],           $four[3]
  7334. .
  7335.